XML - SAX or DOM?
Hi folks,
I'm on the verge of emotional breakdown trying to get my head around working with XML in Java, and I would really appreciate a bit of help.
What I would like to do is to store database metadata in an XML file.
The steps I have taken so far are to read the metadata into a structure of objects (a metadata object that containts arraylists of tables objects that contain arraylists of columns object. Each of these object types holds information about the table or column concerned (table name, column type etc).
I'm stuck when it comes to deciding whether to use SAX or DOM to write / read these files.
Now, I understand that SAX is for sequential access, and DOM is for situations where you'd like to manipulate the XML tree. I guess that, given the nature of my data structure DOM would make more sense? Then I can define a node for each table, then off them, define a node for each column... Or am I missing the point here?
Can anyone give me a nudge in the right direction?
Thanks in advance
s.
Thanks for replying!
Duffymo, I'd rather keep the xml content to the data
to make the files easy to edit / write by hand.Not following you here.
I understand that you want XML files, but XStream can take them and turn them into Java objects for you. Conversely, you can take a graph of Java objects and serialize them as XML.
No worries about DOM or SAX that way.
%
Similar Messages
-
XML: SAX vs. DOM vs. jDom etc.
Is there any reason to use SAX or DOM? I mean is jdom always the best choice? Some information?
http://java.sun.com/webservices/docs/1.0/tutorial/doc/JAXPDOM2.html#67733
-
Org.xml.sax.SAXException: Error:General Schema Error
I am getting the error below. Any clues/workarounds? I am
using WL 6.1.
Thanks in advance,
Eva
The following files are below:
Validate.java
BMDefaultHandler.java
validate.xml
validate.xsd
org.xml.sax.SAXException: Error:General Schema Error: Grammar with uri:http://schemas.xmlsoap.org/soap/envelope/
, can not be
found; schema namespace maybe wrong:
Xerces supports schemas from the "http://www.w3.org/2001/XMLSchema" namespace
or
the instance document's namespace may not match the targetNamespace of the schema.
at
com.bluemartini.xml.BMDefaultHandler.error(BMDefaultHandler.java:32)
at
org.apache.xerces.framework.XMLParser.reportError(XMLParser.java:1249)
at
org.apache.xerces.validators.common.XMLValidator.reportRecoverableXMLEr
ror(XMLValidator.java:1821)
at
org.apache.xerces.validators.common.XMLValidator.validateElementAndAttr
ibutes(XMLValidator.java:3232)
at
org.apache.xerces.validators.common.XMLValidator.callStartElement(XMLVa
lidator.java:1229)
at
org.apache.xerces.framework.XMLDocumentScanner.scanElement(XMLDocumentS
canner.java:1806)
at
org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.dispat
ch(XMLDocumentScanner.java:949)
at
org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentSca
nner.java:381)
at
org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1098)
at
org.apache.xerces.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.ja
va:195)
at
javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:191)
at com.bluemartini.test.Validate.main(Validate.java:32)
===Validate.java
package com.bluemartini.test;
import java.io.*;
import org.w3c.dom.*;
import com.bluemartini.xml.*;
// JAXP imports
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
* Sample test case.
* Eva Flora
public class Validate {
public static void main(String[] argv) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);
factory.setAttribute("http://xml.org/sax/features/validation", Boolean.TRUE);
factory.setAttribute("http://apache.org/xml/features/validation/schema",
Boolean.TRUE);
DocumentBuilder builder = factory.newDocumentBuilder();
BMDefaultHandler bmErrorHandler = new BMDefaultHandler();
builder.setErrorHandler(bmErrorHandler);
File temp = new File("validate.xml");
Document doc = builder.parse(temp);
} catch (Exception e) {
e.printStackTrace();
===BMDefaultHandler.java
package com.bluemartini.xml;
import com.bluemartini.dna.*;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.*;
public class BMDefaultHandler extends
DefaultHandler
public BMDefaultHandler()
public void warning(SAXParseException spe)
throws SAXException
System.out.println("Warning: " + spe.getMessage());
public void error(SAXParseException spe)
throws SAXException
throw new SAXException("Error:" + spe.getMessage());
public void fatalError(SAXParseException spe)
throws SAXException
throw new SAXException("Fatal Error: " + spe.getMessage());
===validate.xml
<?xml version="1.0" encoding="UTF-8"?>
<soapns:Envelope xmlns:soapns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" xmlns:test="http://www.test.com"
xsi:noNamespaceSchemaLocation="validate.xsd">
<soapns:Header/>
<soapns:Body>
<test:GWSMapRequestMessage>
</test:GWSMapRequestMessage>
</soapns:Body>
</soapns:Envelope>
===validate.xsd
<schema xmlns="http://www.w3.org/2000/10/XMLSchema">
<element name="GWSMapRequestMessage" type="TestType"/>
<complexType name="TestType">
</complexType>
</schema>I am getting the error below. Any clues/workarounds? I am
using WL 6.1.
Thanks in advance,
Eva
The following files are below:
Validate.java
BMDefaultHandler.java
validate.xml
validate.xsd
org.xml.sax.SAXException: Error:General Schema Error: Grammar with uri:http://schemas.xmlsoap.org/soap/envelope/
, can not be
found; schema namespace maybe wrong:
Xerces supports schemas from the "http://www.w3.org/2001/XMLSchema" namespace
or
the instance document's namespace may not match the targetNamespace of the schema.
at
com.bluemartini.xml.BMDefaultHandler.error(BMDefaultHandler.java:32)
at
org.apache.xerces.framework.XMLParser.reportError(XMLParser.java:1249)
at
org.apache.xerces.validators.common.XMLValidator.reportRecoverableXMLEr
ror(XMLValidator.java:1821)
at
org.apache.xerces.validators.common.XMLValidator.validateElementAndAttr
ibutes(XMLValidator.java:3232)
at
org.apache.xerces.validators.common.XMLValidator.callStartElement(XMLVa
lidator.java:1229)
at
org.apache.xerces.framework.XMLDocumentScanner.scanElement(XMLDocumentS
canner.java:1806)
at
org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.dispat
ch(XMLDocumentScanner.java:949)
at
org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentSca
nner.java:381)
at
org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1098)
at
org.apache.xerces.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.ja
va:195)
at
javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:191)
at com.bluemartini.test.Validate.main(Validate.java:32)
===Validate.java
package com.bluemartini.test;
import java.io.*;
import org.w3c.dom.*;
import com.bluemartini.xml.*;
// JAXP imports
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
* Sample test case.
* Eva Flora
public class Validate {
public static void main(String[] argv) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);
factory.setAttribute("http://xml.org/sax/features/validation", Boolean.TRUE);
factory.setAttribute("http://apache.org/xml/features/validation/schema",
Boolean.TRUE);
DocumentBuilder builder = factory.newDocumentBuilder();
BMDefaultHandler bmErrorHandler = new BMDefaultHandler();
builder.setErrorHandler(bmErrorHandler);
File temp = new File("validate.xml");
Document doc = builder.parse(temp);
} catch (Exception e) {
e.printStackTrace();
===BMDefaultHandler.java
package com.bluemartini.xml;
import com.bluemartini.dna.*;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.*;
public class BMDefaultHandler extends
DefaultHandler
public BMDefaultHandler()
public void warning(SAXParseException spe)
throws SAXException
System.out.println("Warning: " + spe.getMessage());
public void error(SAXParseException spe)
throws SAXException
throw new SAXException("Error:" + spe.getMessage());
public void fatalError(SAXParseException spe)
throws SAXException
throw new SAXException("Fatal Error: " + spe.getMessage());
===validate.xml
<?xml version="1.0" encoding="UTF-8"?>
<soapns:Envelope xmlns:soapns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" xmlns:test="http://www.test.com"
xsi:noNamespaceSchemaLocation="validate.xsd">
<soapns:Header/>
<soapns:Body>
<test:GWSMapRequestMessage>
</test:GWSMapRequestMessage>
</soapns:Body>
</soapns:Envelope>
===validate.xsd
<schema xmlns="http://www.w3.org/2000/10/XMLSchema">
<element name="GWSMapRequestMessage" type="TestType"/>
<complexType name="TestType">
</complexType>
</schema> -
Org.xml.sax.SAXException: Error:General Schema Error: Grammar
I am getting the error below. Any clues/workarounds? I am
using WL 6.1.
Thanks in advance,
Eva
The following files are below:
Validate.java
BMDefaultHandler.java
validate.xml
validate.xsd
org.xml.sax.SAXException: Error:General Schema Error: Grammar with uri:http://schemas.xmlsoap.org/soap/envelope/
, can not be
found; schema namespace maybe wrong:
Xerces supports schemas from the "http://www.w3.org/2001/XMLSchema" namespace
or
the instance document's namespace may not match the targetNamespace of the schema.
at
com.bluemartini.xml.BMDefaultHandler.error(BMDefaultHandler.java:32)
at
org.apache.xerces.framework.XMLParser.reportError(XMLParser.java:1249)
at
org.apache.xerces.validators.common.XMLValidator.reportRecoverableXMLEr
ror(XMLValidator.java:1821)
at
org.apache.xerces.validators.common.XMLValidator.validateElementAndAttr
ibutes(XMLValidator.java:3232)
at
org.apache.xerces.validators.common.XMLValidator.callStartElement(XMLVa
lidator.java:1229)
at
org.apache.xerces.framework.XMLDocumentScanner.scanElement(XMLDocumentS
canner.java:1806)
at
org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.dispat
ch(XMLDocumentScanner.java:949)
at
org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentSca
nner.java:381)
at
org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1098)
at
org.apache.xerces.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.ja
va:195)
at
javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:191)
at com.bluemartini.test.Validate.main(Validate.java:32)
===Validate.java
package com.bluemartini.test;
import java.io.*;
import org.w3c.dom.*;
import com.bluemartini.xml.*;
// JAXP imports
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
* Sample test case.
* Eva Flora
public class Validate {
public static void main(String[] argv) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);
factory.setAttribute("http://xml.org/sax/features/validation", Boolean.TRUE);
factory.setAttribute("http://apache.org/xml/features/validation/schema",
Boolean.TRUE);
DocumentBuilder builder = factory.newDocumentBuilder();
BMDefaultHandler bmErrorHandler = new BMDefaultHandler();
builder.setErrorHandler(bmErrorHandler);
File temp = new File("validate.xml");
Document doc = builder.parse(temp);
} catch (Exception e) {
e.printStackTrace();
===BMDefaultHandler.java
package com.bluemartini.xml;
import com.bluemartini.dna.*;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.*;
public class BMDefaultHandler extends
DefaultHandler
public BMDefaultHandler()
public void warning(SAXParseException spe)
throws SAXException
System.out.println("Warning: " + spe.getMessage());
public void error(SAXParseException spe)
throws SAXException
throw new SAXException("Error:" + spe.getMessage());
public void fatalError(SAXParseException spe)
throws SAXException
throw new SAXException("Fatal Error: " + spe.getMessage());
===validate.xml
<?xml version="1.0" encoding="UTF-8"?>
<soapns:Envelope xmlns:soapns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" xmlns:test="http://www.test.com"
xsi:noNamespaceSchemaLocation="validate.xsd">
<soapns:Header/>
<soapns:Body>
<test:GWSMapRequestMessage>
</test:GWSMapRequestMessage>
</soapns:Body>
</soapns:Envelope>
===validate.xsd
<schema xmlns="http://www.w3.org/2000/10/XMLSchema">
<element name="GWSMapRequestMessage" type="TestType"/>
<complexType name="TestType">
</complexType>
</schema>I guess the problem is due to the schema namespace
you are using.
xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
pls try with :
"http://www.w3.org/2001/XMLSchema"
regards,
-manoj
"Eva Flora" <[email protected]> wrote in message
news:[email protected]...
I am getting the error below. Any clues/workarounds? I am
using WL 6.1.
Thanks in advance,
Eva
The following files are below:
Validate.java
BMDefaultHandler.java
validate.xml
validate.xsd
org.xml.sax.SAXException: Error:General Schema Error: Grammar with
uri:http://schemas.xmlsoap.org/soap/envelope/
, can not be
found; schema namespace maybe wrong:
Xerces supports schemas from the "http://www.w3.org/2001/XMLSchema"
namespace
or
the instance document's namespace may not match the targetNamespace of the
schema.
at
com.bluemartini.xml.BMDefaultHandler.error(BMDefaultHandler.java:32)
at
org.apache.xerces.framework.XMLParser.reportError(XMLParser.java:1249)
at
org.apache.xerces.validators.common.XMLValidator.reportRecoverableXMLEr
ror(XMLValidator.java:1821)
at
org.apache.xerces.validators.common.XMLValidator.validateElementAndAttr
ibutes(XMLValidator.java:3232)
at
org.apache.xerces.validators.common.XMLValidator.callStartElement(XMLVa
lidator.java:1229)
at
org.apache.xerces.framework.XMLDocumentScanner.scanElement(XMLDocumentS
canner.java:1806)
at
org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.dispat
ch(XMLDocumentScanner.java:949)
at
org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentSca
nner.java:381)
at
org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1098)
at
org.apache.xerces.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.ja
va:195)
at
javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:191)
at com.bluemartini.test.Validate.main(Validate.java:32)
===Validate.java
package com.bluemartini.test;
import java.io.*;
import org.w3c.dom.*;
import com.bluemartini.xml.*;
// JAXP imports
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
* Sample test case.
* Eva Flora
public class Validate {
public static void main(String[] argv) {
try {
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);
factory.setAttribute("http://xml.org/sax/features/validation",
Boolean.TRUE);
factory.setAttribute("http://apache.org/xml/features/validation/schema",
Boolean.TRUE);
DocumentBuilder builder = factory.newDocumentBuilder();
BMDefaultHandler bmErrorHandler = new BMDefaultHandler();
builder.setErrorHandler(bmErrorHandler);
File temp = new File("validate.xml");
Document doc = builder.parse(temp);
} catch (Exception e) {
e.printStackTrace();
===BMDefaultHandler.java
package com.bluemartini.xml;
import com.bluemartini.dna.*;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.*;
public class BMDefaultHandler extends
DefaultHandler
public BMDefaultHandler()
public void warning(SAXParseException spe)
throws SAXException
System.out.println("Warning: " + spe.getMessage());
public void error(SAXParseException spe)
throws SAXException
throw new SAXException("Error:" + spe.getMessage());
public void fatalError(SAXParseException spe)
throws SAXException
throw new SAXException("Fatal Error: " + spe.getMessage());
===validate.xml
<?xml version="1.0" encoding="UTF-8"?>
<soapns:Envelope xmlns:soapns="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
xmlns:test="http://www.test.com"
xsi:noNamespaceSchemaLocation="validate.xsd">
<soapns:Header/>
<soapns:Body>
<test:GWSMapRequestMessage>
</test:GWSMapRequestMessage>
</soapns:Body>
</soapns:Envelope>
===validate.xsd
<schema xmlns="http://www.w3.org/2000/10/XMLSchema">
<element name="GWSMapRequestMessage" type="TestType"/>
<complexType name="TestType">
</complexType>
</schema>
[att1.html] -
Org.xml.sax.SAXParseException: Document root element is missing.
Hi,
I am trying to get the portal login id from a weblogic server based application from iplaet portal server.
I get this follwoing error
org.xml.sax.SAXParseException: Document root element is missing.
at com.sun.xml.parser.Parser.fatal(Parser.java:2817)
at com.sun.xml.parser.Parser.fatal(Parser.java:2805)
at com.sun.xml.parser.Parser.parseInternal(Parser.java:493)
at com.sun.xml.parser.Parser.parse(Parser.java:284)
at com.sun.xml.tree.XmlDocument.createXmlDocument(XmlDocument.java:226)
at com.iplanet.portalserver.util.XMLParser.<init>(XMLParser.java:70)
at com.iplanet.portalserver.naming.share.NamingResponseParser.<init>(NamingResponseParser.java:33)
at com.iplanet.portalserver.naming.share.NamingResponse.parseXML(NamingResponse.java:74)
at com.iplanet.portalserver.naming.WebtopNaming.updateNamingTable(WebtopNaming.java:174)
at com.iplanet.portalserver.naming.WebtopNaming.getNamingProfile(WebtopNaming.java:155)
at com.iplanet.portalserver.naming.WebtopNaming.getServiceURL(WebtopNaming.java:57)
at com.iplanet.portalserver.session.Session.getSessionServiceURL(Session.java:534)
at com.iplanet.portalserver.session.Session.getSessionServiceURL(Session.java:520)
at com.iplanet.portalserver.session.Session.getSession(Session.java:414)
at jsp_servlet.__eatonPortalLogin._jspService(__eatonPortalLogin.java:155)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:27)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1075)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:418)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:462)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:306)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:5517)
at weblogic.security.service.SecurityServiceManager.runAs(SecurityServiceManager.java:685)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3156)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2506)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:234)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:210)
<May 19, 2004 9:01:12 AM EDT> <Error> <HTTP> <101017> <[ServletContext(id=4873279,name=ematrix,context-path=/ematrix)] Root cause of ServletException
com.iplanet.portalserver.session.SessionException
at com.iplanet.portalserver.session.Session.getSessionServiceURL(Session.java:539)
at com.iplanet.portalserver.session.Session.getSessionServiceURL(Session.java:520)
at com.iplanet.portalserver.session.Session.getSession(Session.java:414)
at jsp_servlet.__eatonPortalLogin._jspService(__eatonPortalLogin.java:155)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:27)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1075)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:418)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:462)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:306)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:5517)
at weblogic.security.service.SecurityServiceManager.runAs(SecurityServiceManager.java:685)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3156)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2506)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:234)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:210)
Any help/pointers will be appreciated.
AshishJust for anyone else who hits this problem: I encountered the same issue with an XML document that XMLSpy claims is quite well formed. I opened the document in a hex editor, and there at the from was a three-byte byte order marker - the marker that I believe the UTF-8 standard says is optional. I removed these three bytes, and the file was parsed correctly.
In this case, the XML file was created using a Microsft DOM (save).
My solution is to make the java parser - as I use it - a tad more robust: Open the file and create an input stream - a pushback input stream. Read the first three bytes; if they are NOT a BOM, then push those bytes back. Now - in any case - give the stream to the parser to read.
try {
// Open file for reading.
f = new File(path);
FileInputStream fis = new FileInputStream(f);
PushbackInputStream pis = new PushbackInputStream(fis);
byte[] buf = new byte[3];
pis.read(buf, 0, 3);
if (! (buf[0] == 0x00EF) && (buf[1] == 0x00BB) && (buf[2] == 0x00BF) ) {
pis.unread(buf, 0, 3);
builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
doc = builder.parse(pis);
catch (Exception x) {
x.printStackTrace();
} -
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 get nodes and its attributes of an XML file usiong DOM parsing?
how to get nodes and its attributes of an XML file usiong DOM parsing?
i am new to XML parsing.......
Thanking you........import org.w3c.dom.Document;
import org.w3c.dom.*;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException; ...
//Setup the document
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.parse (new File("MY_XML_FILE.xml"));
//get elemets by name
String elementValue = doc.getElementsByTagName("MY_ELEMENT").item(0).getTextContent();
//This method can return multiple nodes, in this instance I get item(0) , first nodeRead the api for other methods of getting data. -
In Java Mapping Whether to SAX or DOM ?
While implementing Java Mapping which of the following SAX , DOM parsers is the most efficient way to implement it.
I mean considering the voulume of data in the XML format is large which usage will give me most optimal performance .
It would be nice if someone could give a sample most optimal java code using JAXP where input stream is read and after processing written to output stream.
regards
Nilesh Taunk.Hi Nilesh,
>>>While implementing Java Mapping which of the following SAX , DOM parsers is the most efficient way to implement it.
there's no one good answer fot this question
except: it depends:)
SAX and DOM are a little different parsers
so it depends what will your java mapping
have to do: if it will change the
structure or maybe it will only change a few tags,
or maybe it will do something else
have a look at the page below to read a simple
comparision between SAX and DOM
http://www.scit.wlv.ac.uk/~jphb/cp2101/week4/XML_Parsing.html
or this thread:
http://www.biglist.com/lists/xsl-list/archives/200301/msg01318.html
they will give you some idea which one to choose
depending on your requirements
BTW
remember use java mappings only
if you cannot use graphical mapping (very easy debugging)
and if your document cannot be parsed (maybe huge documents)
with XSLT which is supported by many graphilal tools
Regards,
michal
<a href="/people/michal.krawczyk2/blog/2005/06/28/xipi-faq-frequently-asked-questions">XI FAQ - Frequently Asked Questions</a> -
hi
i am trying to parse a document and change a specific text value within an element althouh when i run the program it changes the nodes text however when i check the xml file it doesnt show the changes it remains the same the code that i am using is as follow iwould be greatful if any one culd help:
// ReplaceText.java
// Reads intro.xml and replaces a text node.
// Java core packages
import java.io.*;
// Java extension packages
import javax.xml.parsers.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import javax.xml.transform.dom.*;
// third-party libraries
import org.xml.sax.*;
import org.w3c.dom.*;
public class ReplaceText {
private Document document;
public ReplaceText()
// parse document, find/replace element, output result
try {
// obtain default parser
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
// set parser as validating
factory.setValidating( true );
// obtain object that builds Documents
DocumentBuilder builder = factory.newDocumentBuilder();
// set error handler for validation errors
builder.setErrorHandler( new MyErrorHandler() );
System.err.println( "reading" );
// obtain document object from XML document
File f = new File("D:/Documents and Settings/Administrator/Desktop/xml adv java bk/appC/intro.xml");
System.err.println( "reading" );
document = builder.parse(f);
//document = builder.parse( new File( "intro.xml" ) );
System.err.println( "reading document" );
// retrieve the root node
Node root = document.getDocumentElement();
if ( root.getNodeType() == Node.ELEMENT_NODE ) {
Element myMessageNode = ( Element ) root;
NodeList messageNodes =
myMessageNode.getElementsByTagName( "message5" );
if ( messageNodes.getLength() != 0 ) {
Node message = messageNodes.item( 0 );
System.out.println("iiiii");
// create text node
Text newText = document.createTextNode(
"New Changed Message!!" );
// get old text node
Text oldText =
( Text ) message.getChildNodes().item( 0 );
// replace text
//message.removeChild(oldText);
message.replaceChild( newText, oldText );
// output Document object
// create DOMSource for source XML document
Source xmlSource = new DOMSource( document );
// create StreamResult for transformation result
Result result = new StreamResult( System.out );
// create TransformerFactory
TransformerFactory transformerFactory =
TransformerFactory.newInstance();
// create Transformer for transformation
Transformer transformer =
transformerFactory.newTransformer();
transformer.setOutputProperty( OutputKeys.INDENT, "yes" );
transformer.setOutputProperty( OutputKeys.STANDALONE, "yes" );
// transform and deliver content to client
transformer.transform( xmlSource, result );
// handle exception creating DocumentBuilder
catch ( ParserConfigurationException parserException ) {
parserException.printStackTrace();
// handle exception parsing Document
catch ( SAXException saxException ) {
saxException.printStackTrace();
// handle exception reading/writing data
catch ( IOException ioException ) {
ioException.printStackTrace();
System.exit( 1 );
// handle exception creating TransformerFactory
catch (
TransformerFactoryConfigurationError factoryError ) {
System.err.println( "Error while creating " +
"TransformerFactory" );
factoryError.printStackTrace();
// handle exception transforming document
catch ( TransformerException transformerError ) {
System.err.println( "Error transforming document" );
transformerError.printStackTrace();
public static void main( String args[] )
ReplaceText replace = new ReplaceText();
}the xml file that i am using is as follows:
<?xml version = "1.0"?>
<!-- Fig. 28.10 : intro.xml -->
<!-- Simple introduction to XML markup -->
<!DOCTYPE myMessage [
<!ELEMENT myMessage (message, message5)>
<!ELEMENT message (#PCDATA)>
<!ELEMENT message5 (#PCDATA)>
]>
<myMessage>
<message>welcome to the xml shhhhhushu</message>
<message5>welcome to the xml shhhhhushu</message5>
</myMessage>i would be greatful if some one could please help.....See if the Text 'oldText' actually has any text within it. Sometimes in DOM parsing, you will get something like:
Element
Text (blank)
Text (actual)
Text (blank)Whereas you would expect to receive:
Element
Text (actual)See if that is the case. If yes, modify your logic to iterate through the child text nodes until one with actual text inside of it (getNodeValue()) is found.
- Saish -
SAX and DOM - treating encoding differently ??
Hello!
I have run into a strange problem - I was parsing my xml document using
WebLogic's DOM and SAX parsers to compare their performance, and I found
that while using their DOM parser I was able to parse the document just
fine, using the SAX parser gave me an error:
org.xml.sax.SAXParseException: Declared encoding "UTF-8" does not match
actual one "ISO8859_1"
I don't use any extended characters in the xml document, and even if I
did - I'm puzzled as to why DOM parser would process it without
complaining but the SAX paser would not??
Thanks,
MarinaHello!
I have run into a strange problem - I was parsing my xml document using
WebLogic's DOM and SAX parsers to compare their performance, and I found
that while using their DOM parser I was able to parse the document just
fine, using the SAX parser gave me an error:
org.xml.sax.SAXParseException: Declared encoding "UTF-8" does not match
actual one "ISO8859_1"
I don't use any extended characters in the xml document, and even if I
did - I'm puzzled as to why DOM parser would process it without
complaining but the SAX paser would not??
Thanks,
Marina -
Why to use xml ,sax api ,?
Dear friends
1> Can u please tell me why to use xml instead of html. When the developement is
easy & fast in html, then why peoples are going for xml.
2> Please tell me role of SAX api in relevence to XML.
3>What is difference between DOM & SAX.?
If possible spare few seconds to write to me.
regds
shiv
Email: [email protected]1> Can u please tell me why to use xml instead of
html. When the developement is
easy & fast in html, then why peoples are going for
xml.
HTML is only for presentations like web pages. XML, however, is use to define a new language like XHTML that is for presentations. But there are XML based language that is not for presentation, for example, XLink which allows elements to be inserted into XML documents in order to create and describe links between resources. All in all, XML is a much powerful language than HTML.
2> Please tell me role of SAX api in relevence to
XML.
Simplely put, SAX is a XML parser like DOM that is used to process XML data.
3>What is difference between DOM & SAX.?
Take a look at this: http://java.sun.com/webservices/docs/ea2/tutorial/doc/JAXPIntro.html
Hope this help. -
I am using xerces (in jar form) to parse an XML file.
I've now read, after getting this to work, that xerces can use SAX or DOM.
How do I know which one I am using?Actually, I have never used SAX for modifying attributes, but there is a lot of documentation available.
http://java.sun.com/webservices/docs/1.1/tutorial/doc/JAXPSAX.html#wp69937
I think this is a good example:
import java.io.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import org.apache.xerces.parsers.SAXParser;
public class Trace extends DefaultHandler {
int indent;
void printIndent() {
for (int i=0; i<indent; i++) System.out.print("-");
public void startDocument() {
System.out.println("start document");
public void endDocument() {
System.out.println("end document");
public void startElement(String uri, String localName,
String qName, Attributes attributes) {
printIndent();
System.out.println("starting element: " + qName);
indent++;
public void endElement(String uri, String localName,
String qName) {
indent--;
printIndent();
System.out.println("end element: " + qName);
public void ignorableWhitespace(char[] ch, int start, int length) {
printIndent();
System.out.println("whitespace, length " + length);
public void processingInstruction(String target, String data) {
printIndent();
System.out.println("processing instruction: " + target);
public void characters(char[] ch, int start, int length){
printIndent();
System.out.println("character data, length " + length);
public static void main(String[] args) {
Trace t = new Trace();
SAXParser p = new SAXParser();
p.setContentHandler(t);
try { p.parse(args[0]); }
catch (Exception e) {e.printStackTrace();}
} -
Hi All,
I have build a xml interface for a java application.
I parse the xml files using dom parser, get the data
and pass it to the java application. I know that DOM
builds a in memory tree of the xml file.
Will this degrade the performance of my application.
Will it be better to use a SAX parser instead?
Regards
MilindIt really depends on the size of the data that you are parsing. Parsing big XML files with DOM means you have a big tree in memory using up lots of memory and CPU. With SAX it will just take more time to process the XML than it would a smaller file.
The only way to know for sure if it makes a difference for you is to try both approaches using live data. It doesn't help to profile them if you are using a test XML file that is half the size of what you are planning on using in production.
So, the answer to your question is "It depends". -
System property org.xml.sax.driver not specified
I'm getting the error:
System property org.xml.sax.driver not specified
How do I set this property? Why doesn't it find the default?
I'm using WL6.0
Imports:
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.stream.StreamResult;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.w3c.dom.Document;
import org.w3c.dom.DOMException;
Code Snippet:
try
File stylesheet = new File("LaborDistHours.xsl");
LaborDistHours ldh = new LaborDistHours("1041410011",
"01-feb-2000", "30-mar-2000");
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
StringReader reportXML = new StringReader( ldh.getReportXML() );
document = builder.parse(new InputSource( reportXML ));
TransformerFactory tFactory = TransformerFactory.newInstance();
StreamSource stylesource = new StreamSource(stylesheet);
Transformer transformer = tFactory.newTransformer(stylesource);
//error occurs here
DOMSource source = new DOMSource(document);
StringWriter reportXLST = new StringWriter();
StreamResult result = new StreamResult(reportXLST);
transformer.transform(source, result);
Steven Ford ([email protected])
"...That we here highly resolve that these dead shall not have died in
vain - that this nation, under God, shall have a new birth of Freedom - and
that Government of the people, by the people and for the people shall not
perish from the earth." Abraham Lincolntry to look on xml.apache.org for this error. There should be some pages describing how and why setup this property.
Basically, these properties defines factories for javax extensions. javax defines interfaces and providers than supply implementations, so for example you can use different XML parsers implementations (we use Xalan for one OC4J container and original ORACLE parser for other). To bind this together they use some defined mechanism like setting system property of including special manifest file etc. (I don't know about details)
Myrra -
Org.xml.sax.SAXParseException: White spaces are required between publicId
Hi,
Im migrating an application from weblogic to tomcat 5.5.23 with java 1.5. application involved PDF generation using xalan.jar for transformation. tht pdf generation part is not working in tomcat. Im getting a "org.xml.sax.SAXParseException: White spaces are required between public-Id and system id" error.
so i replaced the old xalan.jar with latest one ( xalan 2.7.1 ) still no use. I have also explicitly defined the property "javax.xml.transform.TransformerFactory" to "org.apache.xalan.processor.TransformerFactoryImpl" still getting the same exception.
plz help
Thanks in Advance.I have had good results using JTidy to parse HTML into a DOM.
Maybe you are looking for
-
Can I combine or merge songs into a single album?
When I view my albums in iTunes, many are fragmented into several albums. This is especially true for albums that contain songs by several artists, like "Saturday Night Fever" but also for albums by the same artist like "Future Shock" by Herbie Hanco
-
Syncing Palm Tungsten E2 with Mac OS 10.4.11
Have synced with Palm Zire 21 for 3 years - no prob. New Tungsten E2 arrives. Can sync calendars from computer to E2, but not from E2 to computer. Also no memos will transfer from computer to E2. Address Book is same. Using USB connection only. Any s
-
I had to disconnect my My Book USB to G5, firewire to external hard drive
I had this hard drive formated journaled whatever was recommended and it has been used to drag all photos off my full G5 internal drive which has only a 80GB hard drive. I have added a second internal drive and have successfully formated it and it sh
-
Adobe Acrobat X & Scan to Brothers MFC printer?
Does anyone know how to get the right drivers so Adobe Acrobat X can scan from Brother's MFC-8860 DN? Would appreciate some help. An adobe technician put me on hold 73 minutes ago and hasn't come back.
-
Hi, XI and HTTP adapter almost have the same parameters. In which circumstance we will use XI adapter instead of HTTP adapter and what is the advantage of using XI adapter over HTTP adapter? regards chaks