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.
    Ashish

    Just 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>

  • Parsing XML using java DOM

    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,
    Marina

    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,
    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.

  • Xerces with SAX or DOM

    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();}
    }

  • Performance sax vs dom

    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
    Milind

    It 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 Lincoln

    try 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.

  • HTTP Adapter VS XI Adapter

    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