Problem while parsing xml file using DOM
I have a xml file NewXML.xml. When I parse it I'm not getting the expected output: I'm trying to get only the value of the "name" tag. When I tried getElementByTagName("name"), I'm not getting the expected result.
Here is my xml file based on a schema
<?xml version="1.0" encoding="UTF-8"?>
<student xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="NewXMLSchema.xsd">
<name>john</name>
<id>1000</id>
</student>
Coding:
public static void main(String argv[])
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
Document document ;
try {
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse( "NewXML.xml" );
NodeList nodeList = (document.getElementsByTagName("name") );
System.out.println(nodeList.getLength()+" node list "+nodeList.item(0));
System.out.println(nodeList.item(0).getNodeValue());
NodeList nodeList1 = nodeList.item(0).getChildNodes();
System.out.println(nodeList1.getLength()+" node list "+nodeList1.item(0));
System.out.println(nodeList1.item(0).getNodeValue());
When I ran the above coding I got:
1 node list [name: null]
null
1 node list [#text: name]
name
What should I do to get the result "john" inorder to change it
Thanks
rathi
System.out.println(nodeList.item(0).getFirstChild().getNodeValue());
Similar Messages
-
Problem while parsing xml file
HI
I have a xml file which looks like this
<--A>
<ID>ABCD</ID>
<--B>
<Amount1>1</Amount1>
<Amount2>2</Amount2>
<--/B>
<--B>
<Amount1>3</Amount1>
<Amount2>4</Amount2>
<--/B>
<--/A>
<--A>
<ID>EFGH</ID>
<--B>
<Amount1>5</Amount1>
<Amount2>6</Amount2>
<--/B>
<--B>
<Amount1>7</Amount1>
<Amount2>8</Amount2>
<--/B>
<--/A>
(Appended -- before tags so that its displayed properly here)
I have to parse through this xml file and for each ID,i have to display corresponding amounts.As we can see //A represents each row.
I have written code like this.
l_clob := '<<<XML Content as shown above >>>;
dbms_xmlparser.parseClob(l_parser, l_clob);
l_doc := dbms_xmlparser.getDocument(l_parser);
-- Free resources associated with the CLOB and Parser now they are no longer needed.
dbms_xmlparser.freeParser(l_parser);
l_nl1 := dbms_xslprocessor.selectNodes(dbms_xmldom.makeNode(l_doc),'//A');
FOR cur_rec IN 0 .. dbms_xmldom.getLength(l_nl1) - 1 LOOP
l_n1 := dbms_xmldom.item(l_nl1, cur_rec);
lv_id := dbms_xslprocessor.valueOf(l_n1,'ID/text()');
l_nl2 := dbms_xslprocessor.selectNodes(dbms_xmldom.makeNode(l_doc),'//B');
FOR cur_rec2 IN 0 .. dbms_xmldom.getLength(l_nl2) - 1 LOOP
l_n2 := dbms_xmldom.item(l_nl2, cur_rec2);
lv_Amount1 := dbms_xslprocessor.valueOf(l_n2,'Amount1/text()');
lv_Amount2 := dbms_xslprocessor.valueOf(l_n2,'Amount2/text()');
dbms_Output.put_line (lv_id ||lv_Amount1|| lv_Amount2 );
end loop;
end loop;
The problem i am facing is , in the second loop i want to disdplay only values corresponding to ID which is coming in first loop.But when i give //B,its going through all the values in xml file under //B but not going through //B part of each record fethed in loop1.
How can we display Each ID and corresponding amounts only(Not all the Amounts in XML File).
Thanks
Pramod
Edited by: 842802 on Mar 21, 2011 9:27 AMNo need for Pl/SQL:
with t as (
select '<A>
<ID>ABCD</ID>
<B>
<Amount1>1</Amount1>
<Amount2>2</Amount2>
</B>
<B>
<Amount1>3</Amount1>
<Amount2>4</Amount2>
</B>
</A>
<A>
<ID>EFGH</ID>
<B>
<Amount1>5</Amount1>
<Amount2>6</Amount2>
</B>
<B>
<Amount1>7</Amount1>
<Amount2>8</Amount2>
</B>
</A>' x from dual
select id,
amount1,
amount2
from t,
xmltable(
'$d/D/A'
passing xmltype('<D>' || x || '</D>') as "d"
columns id varchar2(10) path 'ID',
B xmltype path '/'
) y,
xmltable(
'$d/A/B'
passing y.b as "d"
columns amount1 number path '/B/Amount1',
amount2 number path '/B/Amount2'
) z
ID AMOUNT1 AMOUNT2
ABCD 1 2
ABCD 3 4
EFGH 5 6
EFGH 7 8
SQL> SY. -
Updating XML file using DOM parser
Hi,
Can someone help me, how to update following XML file using DOM parser.
The following is my XML file.
<students>
<student>
<id>1</id>
<name>abc</name>
</student>
<student>
<id>2</id>
<name>xyz</name>
</student>
<student>
<id>3</id>
<name/>
</student>
<student>
<id>4</id>
<name>ijk</name>
</student>
<student>
<id>5</id>
<name></name>
</student>
</students>Consider, I will input 2 fields, ie., id & name. For the matching Id, the name has to be updated.
Though, I have achieved this, but I am unable to update the value for 3rd record, & 5th record ie., id=3 & id=5. Since, these are blank.
Thanks.Some <name> elements have a child node which is a text node. From what you say it appears you know how to change those text nodes.
The other <name> elements don't have any child nodes. But you want one. This suggests to me that you need code that creates a text node and adds it to the <name> element as its child. -
Problem writing xml file using DOM
Hi,
I am trying to write a xml file using DOM. I am using xalan 2.5, xerces 1.4.4, jdk 1.3.1 in JRun 3 on windows.
The code where I get exception :
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
transformer.transform(new DOMSource(doc), new StreamResult("pr.xml"));
I get the runtime error as follows:
javax.servlet.ServletException: null
java.lang.NoSuchMethodError
at org.apache.xml.utils.DOM2Helper.getNamespaceOfNodeDOM2Helper.java:342)
at org.apache.xml.utils.TreeWalker.startNode(TreeWalker.java:387)
at org.apache.xml.utils.TreeWalker.traverse(TreeWalker.java:202)
at org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:343)
Thinking it is because of classpath, I placed xalan 2.5, xerces 1.4.4 jar files in jrun admin lib directory and in server lib directory as well. Still getting the same error.
Any suggestion?
Thanks in advancexalan is included in JRun 4. However JRun 3 does not.
However I tried with the same code in JRun3 in different system. The error is completely different. I understand this is because of different version of files. trying to solve ;)
Here my new exception
javax.servlet.ServletException: org/w3c/dom/ranges/DocumentRange
java.lang.NoClassDefFoundError: org/w3c/dom/ranges/DocumentRange
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:493)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:111)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:248)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:286)
at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:493)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:111)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:248)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:286)
at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)
at org.apache.xerces.jaxp.DocumentBuilderImpl.(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.newDocumentBuilder(Unknown Source)
at com.cybell.appl.deliveryorder.cmd.CreateXMLDOFile.createFile(CreateXMLDOFile.java:73)
at com.cybell.appl.deliveryorder.cmd.CreateXMLDOFile.execute(CreateXMLDOFile.java:36)
at com.cybell.appl.framework.cmd.BaseCommand.start(BaseCommand.java:50)
at com.cybell.appl.framework.control.BaseController.service(BaseController.java:38)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:865)
at allaire.jrun.servlet.JRunSE.service(../servlet/JRunSE.java:1013)
at allaire.jrun.servlet.JRunSE.runServlet(../servlet/JRunSE.java:925)
at allaire.jrun.servlet.JRunNamedDispatcher.forward(../servlet/JRunNamedDispatcher.java:34)
at allaire.jrun.servlet.Invoker.service(../servlet/Invoker.java:84)
at allaire.jrun.servlet.JRunSE.service(../servlet/JRunSE.java:1013)
at allaire.jrun.servlet.JRunSE.runServlet(../servlet/JRunSE.java:925)
at allaire.jrun.servlet.JRunRequestDispatcher.forward(../servlet/JRunRequestDispatcher.java:88)
at allaire.jrun.servlet.JRunSE.service(../servlet/JRunSE.java:1131)
at allaire.jrun.servlet.JvmContext.dispatch(../servlet/JvmContext.java:330)
at allaire.jrun.http.WebEndpoint.run(../http/WebEndpoint.java:107)
at allaire.jrun.ThreadPool.run(../ThreadPool.java:272)
at allaire.jrun.WorkerThread.run(../WorkerThread.java:75) -
Problem while reading XML file from Aplication server(Al11)
Hi Experts
I am facing a problem while reading XML file from Aplication server using open data set.
OPEN DATASET v_dsn IN BINARY MODE FOR INPUT.
IF sy-subrc <> 0.
EXIT.
ENDIF.
READ DATASET v_dsn INTO v_rec.
WHILE sy-subrc <> 0.
ENDWHILE.
CLOSE DATASET v_dsn.
The XML file contains the details from an IDOC number , the expected output is XML file giving all the segments details in a single page and send the user in lotus note as an attachment, But in the present output after opening the attachment i am getting a single XML file which contains most of the segments ,but in the bottom part it is giving the below error .
- <E1EDT13 SEGMENT="1">
<QUALF>001</QUALF>
<NTANF>20110803</NTANF>
<NTANZ>080000</NTANZ>
<NTEND>20110803<The XML page cannot be displayed
Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again later.
Invalid at the top level of the document. Error processing resource 'file:///C:/TEMP/notesD52F4D/SHPORD_0080005842.xml'.
/SPAN></NTEND>
<NTENZ>000000</NTENZ>
for all the xml its giving the error in bottom part , but once we open the source code and if we saved in system without changing anything the file giving the xml file without any error in that .
could any one can help to solve this issue .Hi Oliver
Thanx for your reply.
see the latest output
- <E1EDT13 SEGMENT="1">
<QUALF>003</QUALF>
<NTANF>20110803</NTANF>
<NTANZ>080000</NTANZ>
<NTEND>20110803</NTEND>
<NTENZ>000000</NTENZ>
<ISDD>00000000</ISDD>
<ISDZ>000000</ISDZ>
<IEDD>00000000</IEDD>
<IEDZ>000000</IEDZ>
</E1EDT13>
- <E1EDT13 SEGMENT="1">
<QUALF>001</QUALF>
<NTANF>20110803</NTANF>
<NTANZ>080000</NTANZ>
<NTEND>20110803<The XML page cannot be displayed
Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again later.
Invalid at the top level of the document. Error processing resource 'file:///C:/TEMP/notesD52F4D/~1922011.xml'.
/SPAN></NTEND>
<NTENZ>000000</NTENZ>
E1EDT13 with QUALF>003 and <E1EDT13 SEGMENT="1">
with <QUALF>001 having almost same segment data . but E1EDT13 with QUALF>003 is populating all segment data
properly ,but E1EDT13 with QUALF>001 is giving in between. -
Parsing .xsd files using DOM
Hi,
I am trying to parse a xsd file using DOM. The xsd has several nodes like
<xsd:complexType name="AccountLocate">
I want to extract the strings AccountLocate and AccountCategory and use them for further processing.
The hierarchy of the nodes is created without issues, but when I try to view the name and value of each node using getNodeName() and getNodeValue() method the node name I get and node value is as follows:
NODE-NAME NODE-VALUE NODE-TYPE
xsd:complexType null 1 //corresponds to the xsd:complexType node
#text 3 //corresponds to the AccountLocate node
Is there anyway (any DOM method for example) by which I can isolate the name AccountLocate?
Thanks and regards,
PrabalWhich parser is used for parsig?
With the DocumentBuilder parser set:
DocumentBuilderFactory factory
= DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);For parsing with the javax.xml.xpath.XPath class set the NamespaceContext on the XPath object. -
Error while saving xml file using PDFDocument API
Hi,
I am trying to save xml file using byte array obtained from interactive form element in webdynpro java.
The file gets saved but I get fllowing error message when I open the file.
The XML page cannot be displayed
Cannot view XML input using style sheet. Please correct the error and then click the Refresh button, or try again later.
An invalid character was found in text content. Error processing resource 'http://uxjciesk.wdf.sap.corp:50000/irj/go/km/doc...
The code I am trying to achieve the functionality is:
byte[] byteArray = wdContext.currentContextElement().getPdfSource();
IWDPDFDocumentHandler pdfDocumentHandler = WDPDFDocumentFactory.getDocumentHandler();
IWDPDFDocumentAccessibleContext documentAccessibleContext = pdfDocumentHandler.getDocumentAccessibleContext();
documentAccessibleContext.setPDF(byteArray);
IWDPDFDocument pdfDocument = documentAccessibleContext.execute();
ByteArrayInputStream dataInputStream = (ByteArrayInputStream) pdfDocument.getPDFAsStream();
further, the datainputstream is used to store the file. I am able to save same xdp template in pdf file format successfully, the error only occurs for xml file storage.
Please, advise.
Regards,
UrvashiHi Urvashi,
Try this code
String contentStr = getXMLData(wdContext.currentContextElement().getPdfSource().read(false));
String data = "";
ByteArrayOutputStream pdfSourceOutputStream = new ByteArrayOutputStream();
try {
InputStream pdfSourceInputStream = wdContext.currentContextElement().getData().read(false);
BufferedInputStream bufferedInputStream = new BufferedInputStream(wdContext.currentContextElement().getData().read(false));
int aByte;
while ((aByte = bufferedInputStream.read()) != -1) {
pdfSourceOutputStream.write(aByte);
pdfSourceOutputStream.flush();
pdfSourceOutputStream.close();
IWDPDFDocument pdfDocument = null;
try {
// Create an instance for PDFDocumnetHandler
IWDPDFDocumentHandler pdfDocumentHandler = WDPDFDocumentFactory.getDocumentHandler();
//Create an Inatance for PDFDocumentAccessibleContext
IWDPDFDocumentAccessibleContext documentAccessibleContext = pdfDocumentHandler.getDocumentAccessibleContext();
//set the pdf data as OutputStream to the PDFDocumentAccessibleContext instance
documentAccessibleContext.setPDF(pdfSourceOutputStream);
//call the server to get the data
pdfDocument = documentAccessibleContext.execute();
//get the xml data in a InputStream
ByteArrayInputStream dataInputStream = (ByteArrayInputStream) pdfDocument.getData();
} catch (Exception e) {
data = "Null";
} catch (IOException e) {
Regards,
Mathan -
"encoding = UTF-8" missing while writing XML file using file Adapter
Hi,
We are facing an unique problem writing xml file using file adapter. The file is coming without the encoding part in the header of xml. An excerpt of the file that is getting generated:
<?xml version="1.0" ?>
<customerSet>
<user>
<externalID>51017</externalID>
<userInfo>
<employeeID>51017</employeeID>
<employeeType>Contractor</employeeType>
<userName/>
<firstName>Gail</firstName>
<lastName>Mikasa</lastName>
<email>[email protected]</email>
<costCenter>8506</costCenter>
<departmentCode/>
<departmentName>1200 Corp IT Exec 8506</departmentName>
<businessUnit>1200</businessUnit>
<jobTitle>HR Analyst 4</jobTitle>
<managerID>49541</managerID>
<division>290</division>
<companyName>HQ-Milpitas, US</companyName>
<workphone>
<number/>
</workphone>
<mobilePhone>
<number/>
</customerSet>
</user>
So if you see the header the "encoding=UTF-8" is missing after "version-1.0".
Do we need to configure any properties in File Adapter?? Or is it the standard way of rendering by the adapter.
Please advice.
Thanks in advance!!!System.out.println(nodeList.item(0).getFirstChild().getNodeValue());
-
Parsing Error while Parsing XML file
Hi I am trying to parse an xml file with use of an stylehseet as shown below but its giving an error message as follows
[Fatal Error] myfile2.xml:1:8: The processing instruction target matching "[xX][mM][lL]" is not allowed.
org.xml.sax.SAXParseException: The processing instruction target matching "[xX][mM][lL]" is not allowed.
at org.apache.xerces.parsers.DOMParser.parse(DOMParser.java:235)
at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:201)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
at Stylizer.main(Stylizer.java:50)
The sample xml file is
- <nitf id="366045">
- <head>
<title type="main">������� �������� ������</title>
- <tobject toobject.type="���� �����">
<tobject.subject tobject.subject.type="�����" tobject.subject.matter="����� ������" />
</tobject>
- <docdata>
<date.issue norm="28/09/2002" />
<doc.copyright year="YYYY" holder="Aljazeera.net" />
</docdata>
<pubdata type="web" position.section="�����" />
</head>
- <body>
- <body.head>
- <hedline>
<hl1>������� �������� ������</hl1>
</hedline>
- <byline>
<person>�������</person>
</byline>
- <dateline>
<location>�����</location>
<story.date>31/03/1999</story.date>
</dateline>
<abstract>����� ����������� �������������� ���� ����� �������� ���� ��� ������� ������ �� ����� ������.</abstract>
</body.head>
<body.content>���� ������: �� ��� ��������. ���� ���� ��� ���� ���� �� ���� ����.</body.content>
</body>
</nitf>
and stylesheet file is as follows:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:for-each select="NITF_News/News/nitf">
<xsl:value-of select='body.head/hedline/hl1'/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Now can anyone tell me why is this coming up
Thanks
RajSorry for that
This is the xml file as follows : --
<?xml version="1.0" encoding="UTF-16" ?>
- <NITF_News xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="http://mycompany.com/mynamespace">
- <user_data>
<client_no>31</client_no>
<profile_id>57</profile_id>
<private_key>5A07A6F0-0535-46E8-87CF-398062BA77C3</private_key>
</user_data>
- <News>
- <nitf id="365751">
- <head>
<title type="main">���� ���� ��� ����� �� ������� ���������</title>
- <tobject toobject.type="������ ��������">
<tobject.subject tobject.subject.type="�����" tobject.subject.matter="������ ������" />
</tobject>
- <docdata>
<date.issue norm="29/09/2002" />
<doc.copyright year="YYYY" holder="Aljazeera.net" />
</docdata>
<pubdata type="web" position.section="�����" />
</head>
- <body>
- <body.head>
- <hedline>
<hl1>���� ���� ��� ����� �� ������� ���������</hl1>
</hedline>
- <byline>
<person>none</person>
</byline>
- <dateline>
<location>�������</location>
<story.date>29/09/2002</story.date>
</dateline>
<abstract>���� ���� ���� ���������� ��� ����� �� ������� �������� �������� �� �������� ���� ��� ������� ������ ����� �� ������� �������� ���������. ��� ���� ������ ����� ��������� �� ���� ������ �� ����� ������ �� ������ ��� ������� ������.</abstract>
</body.head>
<body.content>������ ���� ���� ����� ��� ������ ��� ������� ������ ������ ����� ��������� ���� ���� ���� ���������� �� ����� ������ �������� ��� ����� �� ������� �������� �������� �� ������� ���� ��� ���� ������ ������� ��� ������ �� ����� ������ ���������. ���� ���� ��� �� ����� ���� ���� ���� ���� ������ "����� ����� ���� ����� ����� �� ������ ��������� �� ����� ��� ���� ���� ����"� ����� ��� �� ��� ������ ����� ��� ���� ������� ����� ��� ���� ������� ������ �� ���� ������. ����� ������ �� ����� ��� ����� ������ ������ ��������� ������� ����� ������ ������ ������ ��� �� �� ��� ��� �������� �������� ����� ������ �� ���� �������� �� ��� �������. ��� ���� ������ ����� ��������� �� ���� ������ �� ����� ������ ������� ������ �� ������ ����� ���� ��� ����� ����� ����� �� ���� ����� ������ �������. ���� �������� �������� �� ��� ����� ��� �������� ���� ����� �� ������� ������ ���� ���� ��� ���� ����� �� ��� ������ ����� ������� ��� ��� ��� ����� ���� ������ ��������. ���� ������ ������� ������ �� ������� �������� �� ������� ��� ��� ���� ����� �� ������ ��� ����� ������� ������� ������� ����� ��� ���� ������� ���������. ���� ��� �� ���� ���� ����� ����� ���� �� 800 ��� ��� ��� 1968 �� ������ ���� ���� ��� ����� ���� ������ ������ �� ���� ������� ����� ��� �����. ����� �������� ������� �������� �������� ��� ������ ��������� ����� �������.</body.content>
</body>
</nitf>
</News>
</NITF_News>
I have a java program which will parse this xml file using an xsl file and will produce another xml file as desired by me .This new xml file format will be defined in the xsl file as follows
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<?xml version="1.0" encoding="UTF-16"?>
<businessnews>
<xsl:for-each select="root/nitf">
<story>
<h1 color="RED">
<headline>Headline<xsl:value-of select='mitem_maintitle'/></headline>
<author>Author</author>
<summary>Summary<xsl:value-of select='mitem_summary'/></summary>
<article>Article</article>
<date>Date<xsl:value-of select='published_date'/></date>
<category>Category<xsl:value-of select='el_topics/main_topic_desc'/></category>
</h1>
</story>
</xsl:for-each>
</businessnews>
</xsl:template>
</xsl:stylesheet>
Now it is always giving the error message as follows
The processing instruction target matching "[xX][mM][lL]" is not allowed.
Hoping for a positive reply
Thanks
Raj -
Reading from XML file using DOM parser.
Hi,
I have written the following java code to read the XML file and print the values. It reads the XML file. It gets the node NAME and prints it. But it returns null when trying to get the node VALUE. I am unable to figure out why.
Can anyone please help me with this.
Thanks and Regards,
Shweta
import java.io.*;
import java.net.*;
import java.util.*;
import oracle.xml.parser.v2.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
public class ReadNodes
private static XMLDocument mDoc;
public ReadNodes () {
try {
DOMParser lParser = new DOMParser();
URL lUrl = createURL("mot.xml");
System.out.println("after creating the URL object ");
lParser.setErrorStream(System.out);
lParser.showWarnings(true);
lParser.parse(lUrl);
mDoc = lParser.getDocument();
System.out.println("after creating the URL object "+mDoc);
lParser.reset();
} catch (Exception e) {
e.printStackTrace();
} // end catch block
} // End of constructor
public void read() throws DOMException {
try {
NodeList lTrans = this.mDoc.getElementsByTagName("TRANSLATION");
for(int i=0;i<lTrans.getLength();i++) {
NodeList lTrans1 = lTrans.item(i).getChildNodes();
System.out.println("lTrans1.item(0).getNodeName : " + lTrans1.item(0).getNodeName());
System.out.println("lTrans1.item(0).getNodeValue : " + lTrans1.item(0).getNodeValue());
System.out.println("lTrans1.item(1).getNodeName : " + lTrans1.item(1).getNodeName());
System.out.println("lTrans1.item(1).getNodeValue : " + lTrans1.item(1).getNodeValue());
} catch (Exception e) {
System.out.println("Exception "+e);
e.printStackTrace();
} catch (Throwable t) {
System.out.println("Exception "+t);
public static URL createURL(String pFileName) throws MalformedURLException {
URL url = null;
try {
url = new URL(pFileName);
} catch (MalformedURLException ex) {
File f = new File(pFileName);
String path = f.getAbsolutePath();
String fs = System.getProperty("file.separator");
System.out.println(" path of file : "+path +"separator " +fs);
if (fs.length() == 1) {
char sep = fs.charAt(0);
if (sep != '/')
path = path.replace(sep, '/');
if (path.charAt(0) != '/')
path = '/' + path;
path = "file://" + path;
System.out.println("path is : "+path);
// Try again, if this throws an exception we just raise it up
url = new URL(path);
} // End catch block
return url;
} // end method create URL
public static void main (String args[]) {
ReadNodes mXML = new ReadNodes();
mXML.read();
The XML file that I am using is
<?xml version = "1.0"?>
<DOCUMENT>
<LANGUAGE_TRANS>
<TRANSLATION>
<CODE>3</CODE>
<VALUE>Please select a number</VALUE>
</TRANSLATION>
<TRANSLATION>
<CODE>5</CODE>
<VALUE>Patni</VALUE>
</TRANSLATION>
<TRANSLATION>
<CODE>6</CODE>
<VALUE>Status Messages</VALUE>
</TRANSLATION>
<TRANSLATION>
<CODE>7</CODE>
<VALUE>Progress</VALUE>
</TRANSLATION>
<TRANSLATION>
<CODE>8</CODE>
<VALUE>Create Data Files...</VALUE>
</TRANSLATION>
<TRANSLATION>
<CODE>9</CODE>
<VALUE>OK</VALUE>
</TRANSLATION>
</LANGUAGE_TRANS>
</DOCUMENT>because what you want is not the node value of CODE but the node value of the text nodes into it!
assuming only one text node into it, try this:
System.out.println("lTrans1.item(0).getNodeName : " + lTrans1.item(0).getFirstChild().getNodeValue()); -
How to parse nested xml file using dom
i want to parse nested xml file
please tell me how to parse nested xml
for eg.
<xml>
<row>
<name>Rahul<name>
<row><newXml>
<newXML>
<Row>
<code>12</code>
</Row>
<newXML>
<XML>
please tell how to parse this fileNormally if you have no idea about X, the first thing you should do is google "X tutorial". You will find plenty of them out there. And the advantage is, they are better written than whatever we spend two minutes throwing together here. Not to mention that it saves us the two minutes.
But if you have specific questions with your SAX parser when you get it going, then ask them here. Actually, ask them in the XML forum here, not this one. -
"character conversion error" while parsing xml files
Hello,
I'm trying to parse MusicXML (Recordare) files, but I'm getting an exception.
I'm using the SAX parser (javax.xml.parsers.SAXParser).
Here is the code I use to instantiate it:
final javax.xml.parsers.SAXParserFactory saxParserFactory = javax.xml.parsers.SAXParserFactory.newInstance();
final javax.xml.parsers.SAXParser saxParser = saxParserFactory.newSAXParser();
final org.xml.sax.XMLReader parser = saxParser.getXMLReader();
I'm using my own handler, but I get the same exception even if I use org.xml.sax.helpers.DefaultHandler.
The error I get is:
Character conversion error: "Illegal ASCII character, 0xc2" (line number may be too low).
The first few lines of my xml files look like this:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE score-partwise
PUBLIC "-//Recordare//DTD MusicXML 0.6 Partwise//EN"
"http://www.musicxml.org/dtds/partwise.dtd">
<score-partwise>
[...etc...]
If I delete the <!DOCTYPE ...> line, then I don't get the exception anymore. But the MusicXML files I get (from some other program) always contain this line, and it would be quite some work to delete them from every file manually.
So does anyone know if there is a way to avoid deleting that line in every file, while still being able to parse the xml files without exceptions?
Or maybe does anyone know what the exact cause of the exception is? (because I don't know what exactly causes it)
Thank you in advance.
Greetz,
JipoSo does anyone know if there is a way to avoid
deleting that line in every file, while still being
able to parse the xml files without exceptions?ok this is side-stepping the real problem but I've used this code to filterout DTD references for other reasons public static InputStream filterOutDTDRef(InputStream in) throws IOException {
BufferedReader iniReader = new BufferedReader(new InputStreamReader(in));
StringBuffer newXML = new StringBuffer();
for(String line = iniReader.readLine(); line!=null; line = iniReader.readLine())
newXML.append(line+"\n");
in.close();
int s = newXML.indexOf("<!DOCTYPE ");
if(s!=-1)
newXML.replace(s,newXML.indexOf(">",s)+1,"");
return new ByteArrayInputStream(newXML.toString().getBytes());
}and it actually speeds up the parsing phase too (since the DTD ref.s were on the web and the XML standard mandates that there is a fetch for each xml file parsed..)
you can feed the above into the InputSource constructor that takes an InputStream argument.
Now for the real problem... 0xc2 is "LATIN CAPITAL LETTER A WITH CIRCUMFLEX" according to a unicode chart - which is not an ASCII character (as the error message correctly reports). I'm not sure why the file is being parsed as ASCII though? You could try parsing in a FileReader to the inputsource and hope it picks up the default character encoding of your system, and that that character encoding matches the file. Or you could try passing in a FileReader constructed with a explicit character encoding (eg "UTF8") and see if that does the trick?
asjf -
LPX-00004 - Problems while inserting xml files in a xmltype column
I've faced two problems while trying to insert xml files into my table containing a xmltype column:
create table xml_test (id number(20),content xmltype)
I use following java code for writing xml docs into db:
conn.setAutoCommit(false);
OraclePreparedStatement stmt = (OraclePreparedStatement)
conn.prepareStatement("INSERT INTO xml_test (id,content) VALUES(?,?)");
File file = new File(file1);
InputStream in1 = new FileInputStream(file1);
Reader r1 = new BufferedReader(new InputStreamReader(in1, "UTF-8"));
int len = 0;
StringBuffer text = new StringBuffer();
while ((len = r1.read()) != -1) {
text.append((char) len);
in1.close();
r1.close();
XMLType poXML1 = XMLType.createXML(conn, text.toString());
for (int i = 1; i <= 1; i++) {
stmt.setInt(1, i);
stmt.setObject(2, poXML1);
stmt.execute();
conn.commit();
1. problem: occures only if a xml schema has been assoicated to the specific xmltype column. it seems that the length of a specific xml tag in the document is limited. but why?
java.sql.SQLException: ORA-22814: attribute or element value is larger than specified in type
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1093)
at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2047)
at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1940)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2709)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:589)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:656)
at test.insertXML(test.java:84)
at test.main(test.java:261)
hier the xml-schema of the xmltype column "content":
<?xml version="1.0" encoding="UTF-8"?>
<!--W3C Schema generated by XML Spy v4.4 U (http://www.xmlspy.com)-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="AUTOR-ID" type="xs:string"/>
<xs:element name="BODY" type="xs:string"/>
<xs:element name="CONTENT">
<xs:complexType>
<xs:sequence>
<xs:element ref="METADATEN"/>
<xs:element ref="BODY"/>
</xs:sequence>
<xs:attribute name="content-id" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="DATUM" type="xs:string"/>
<xs:element name="KEYWORD" type="xs:string"/>
<xs:element name="METADATEN">
<xs:complexType>
<xs:sequence>
<xs:element ref="DATUM"/>
<xs:element ref="TITEL" maxOccurs="unbounded"/>
<xs:element ref="KEYWORD" maxOccurs="unbounded"/>
<xs:element ref="AUTOR-ID"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="TITEL" type="xs:string"/>
</xs:schema>
2. problem: hier i have no idea what is happening ... please help
java.sql.SQLException: ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing
LPX-00004: internal error "MultiChar overflow"
Error at line 61
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1093)
at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2047)
at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1940)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2709)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:589)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:656)
at test.insertXML(test.java:53)
at test.main(test.java:259)It's hard for me to tell you more without seeing your instance data, but for problem #1, if you look at the underlying SQL types being generated by your schema, you will see that the default SQL mapping for a "string" in your schema is a VARCHAR2(4000) (and I believe this would be only 2000 for a varying width character set like UTF8).
You can specify that you wish this column to be mapped as a CLOB in your schema if this is the problem. Also note that there is a 64K limit on the size of an individual node in XMLType. -
Problem reading an xml file using java
i have a Com File which is called through .Net application and i made another java application that call the same COM file using JNI . but the problem is that the xml format generated from the Com file in case of the .Net application is approx 49.9K and the same Xml file Contents generated through java is half the size of the previous file in .net about 24.9K . I had figured out that the .Net application generates the xml file as unicode format while the java application generates the same xml format as ANSI format which is approx the half of the .Net counterpart .
but the problem now is that i can't deserialize the java generated xml to convert it into its java object using XMLDecoder because it is ill formed xml whereas its tags are well structured .
even when i try to open that .NEt xml file into the IE browser it structures the xml file successfully
while the java xml file version tells me that the file is ill formed knowing that the file is well structured and all the tags are valid.First of, that's not "Unicode" and "ANSI". Those are not really encodings per-se. "Unicode" is sometimes used to refer to UTF-16/UCS-2, and "ANSI" is sometimes used to refer to whatever the current 1-byte encoding of the machine is. But again: Those are not valid encoding names. The encodings used are probably UTF-16 (or UCS-2) and UTF-8, respectively.
Next: unless you tell us some exact error message we can't tell you what went wrong.
And if you want to find out if any given XML file is valid, just run it through some validator (such as [the one from the W3C|http://validator.w3.org/]). -
Error while loading xml files using JDBC
Hi,
I am trying to load xml files into an xmltype table using JDBC calls and am getting this error for some files
LPX-00200: could not convert from encoding UTF-8 to UCS2
The xml files and our database are both UTF-8 encoded. The version of oracle that we have here is 9.2.0.6
Any suggestions in this matter will be greatly appreciated.
Thanks,
UmaI also experienced this problem and unfortunately this solution didn't work for me given that the tag you suggested was already on the XML file.
Maybe you are looking for
-
I have songs in my iTunes Application that will not play. I keeps saying that this computer is not authourized to play name of song would you like to authourize it. The problem is its the old account I had and that has been changed. How am I going
-
Ipad- wireless - Mail page crashes after a few seconds and cannot stay open
Can any one help please? Having operated well for for a while now the Mail page only opens for a few seconds and closes down. I have re-synched with Outlook; powered down etc. but no luck so far with resolving this
-
I have to store year and date in a database column like 'yeardate number(6)'. I have the year and month being passed to my procedure in a number and character strings respective. Month's value is like 'MARCH' i.e. a string, and year value is like 200
-
Named.log not rolling?
We've got our primary dns server running on a 10.5server machine, and I discovered this morning that the reason the disk space was disappearing is that the named.log has NEVER rolled -- the file starts with 2008! I created a new (empty) named.log fil
-
'ken burns' poor quality interlacing jagged
This post is to document issues with 'Ken Burns' rendering in Final Cut Express 4 and some workarounds and possible bugs in software I found. Similar posts about this issue: https://discussions.apple.com/message/5207261#5207261 When I import images i