Validating a Dom XML tree

Is there a solution to validate a XML document represented by a DOM Document ?
The class DocumentBuilder let us validate a XML document but only when parsing XML file and not a DOM tree.
In my program, I build an XML document using DOM (Node.appendChild(), ...); and I'd like, after having built it, to validate it. How can I do ?
Thank's.

Serialize it to some output format, making sure you include a reference to the DTD you want to validate against. Then read that output back into a validating parser.

Similar Messages

  • XML validation using javax.xml.validation

    Hello,
    I am trying to validate some xml against my xsd.
    Here is my xml:
    <host>
        <status>Unknown</status>
    </host>Here is my xsd:
    <?xml version="1.0"?>
                                                                                                                                                                 <xsd:schema targetNamespace="blah"
            xmlns:tns="blah"
            xmlns:xsd="blah">
    <xsd:simpleType name="Status">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="Unknown"/>
    </xsd:restriction>
    </xsd:simpleType>
    <xsd:element name="host">
       <xsd:complexType>
         <xsd:all>
           <xsd:element name="status" type="tns:Status"/>
         </xsd:all>
       </xsd:complexType>
    </xsd:element>
                                                                                                                                                                 </xsd:schema>My test code is:
            try
                DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
                Document document = parser.parse(new File("test.xml"));
                // Create a SchemaFactory capable of understanding WXS schemas.
                SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
                // Load a WXS schema, represented by a Schema instance.
                StreamSource schemaFile = new StreamSource(new File("schema.xsd"));
                Schema schema = factory.newSchema(schemaFile);
                // Create a Validator object, which can be used to validate the document
                Validator validator = schema.newValidator();
                // Validate the DOM tree.
                validator.validate(new DOMSource(document));
            catch(Exception e)
                fail("XML validation failed: " + e.getMessage());
            }I get the following error:
    ERROR: 'cvc-elt.1: Cannot find the declaration of element 'host'.'
    If i replace "type=tns:Status' in the "status" element with just "type=string", it works fine.
    Does anyone have any idea what the problem is?
    Thank you,
    David

    To daft_davy:
    1. Your XSD document is invalid: the xmlns attribute of schema documents must always have the following value: "http://www.w3.org/2001/XMLSchema"
    All other values will result in the following validation error:
    org.xml.sax.SAXParseException: s4s-elt-schema-ns: The namespace of element 'schema' must be from the schema namespace, 'http://www.w3.org/2001/XMLSchema'.
    Your XSD should look like this:
    <?xml version="1.0"?>
    <xsd:schema targetNamespace="blah" xmlns:tns="blah" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <xsd:simpleType name="Status">
        <xsd:restriction base="xsd:string">
          <xsd:enumeration value="Unknown"/>
        </xsd:restriction>
      </xsd:simpleType>
      <xsd:element name="host">
        <xsd:complexType>
          <xsd:all>
            <xsd:element name="status" type="tns:Status"/>
          </xsd:all>
        </xsd:complexType>
      </xsd:element>
    </xsd:schema>2. Your XML document does not match the XSD schema (even if you use the one above) for the following reasons:
    a) The root element of the XML document must be associated with the namespace defined by the targetNamespace attribute of the schema.
    b) The "blah" namespace at the element <status> in the XML document has to be undeclared because there is no namespace declaration to this element in the schema document either. There are to ways to do this:
    <host xmlns="blah">
      <status xmlns="">Unknown</status>
    </host>or:
    <xxx:host xmlns:xxx="blah">
      <status>Unknown</status>
    </xxx:host>
    To watertownjordan:
    The namespace URI can be virtually any string, so you don't need to specify a valid URI to define a namespace.

  • Com.sun.xml.tree

    Hi all,
    I am new to JAVA's XML related capabilities. I am trying to compile a program which imports com.sun.xml.tree for some reason. But I am not able to find which jar file it actually needs for this package and where to get it from. Can somebody please help?
    Thanks alot,
    Ritesh Maheshwari

    This is a common problem that is a result of improper use of the JAXP libraries.
    The com.sun.xml.tree package is an implementation package that was part of the JAXP 1.1 (I culd be wrong about the number) but is not part of the new versions that come with 1.4.
    The person whoe wrote the code should never have used that package directly. In fact if you look at the Java docs for that package is specifically states not to use the classes directly.
    Most likely the code uses the conm.sun.xml.tree.XmlDocument class to write a DOM document to a file.
    If that is the case I can provide replacement code that will work in 1.4

  • Where to get  om.sun.xml.tree.XmlDocument library

    Can some one help me on the following problem?
    I am using a DOM paser and I need to print out the modified xml file. So I want to use the write funcition defined in the com.sun.xml.tree.XmlDocument library. But this package is NOT included in JAXP package. Where shall I get this om.sun.xml.tree.XmlDocument library?
    Any help is greatly appreciated.

    Let me guess, you want to write a DOM document
    to text. right?Wow, I'm a real mind reader considering you said as much in your post :{                                                                                                                                                                                                                                                                                       

  • Where is com.sum.xml.tree.XmlDocument

    Is there somebody who can tel me where to find
    class com.sun.xml.tree.XmlDocument. I have some samples which i want to compile but i get a message that the XmlDocument class is not found. In my Jaxp classes is no class with that name.
    So if there is somebody who knows that please answer
    With greetings in previous M.Grosser

    The new implementation of JAXP does not use com.sum.xml.tree.XmlDocument. I would also avoid using any of the implementation classes in any DOM package. My ex-coworker used this com.sum.xml.tree.XmlDocument and now we have to rewrite that code because our the new version or our application server automatically comes with the new version of JAXP and we get class cast exceptions. Even if you look at the API for any DOM implementation class you should see a warning saying that the classes could change without warning. Don't use them.

  • Looking for com.sun.xml.tree package

    Hi,
    I�m looking for a jar which contains the XmlDocument class to download.
    I found the package, (it�s com.sun.xml.tree) but I cannot find where the package/jar is to download it.
    Your help will be much appreciated.
    Thank you,
    Chris

    I have all latest jars (jaxp, xerces, xalan, jdom, dom4j and any related jars). I have w3c DOM and i have been trying to convert it to JDOM and dom4j using relevant APIs. i keep getting following error.
    Exception in thread "main" java.lang.AbstractMethodError: com.sun.xml.tree.Eleme
    ntNode.getNamespaceURI()Ljava/lang/String;
    at org.dom4j.io.DOMReader.readElement(DOMReader.java:181)
    at org.dom4j.io.DOMReader.readTree(DOMReader.java:106)
    at org.dom4j.io.DOMReader.read(DOMReader.java:88)
    Can you advise what could be the reason and how to resolve this?
    FYI : my w3c DOM has been created with com.sun.xml.tree.XmlDocumentBuilder class and other methods of the package. I need to resolve this error at earliest to move forward.
    I would apprecaite early response at [email protected]
    Thanks,

  • Import  com.sun.xml.tree.XmlDocument

    Hello! Can some one help me on the following problem?
    I am writing a DOM parser and I need to print out the modified xml file. So I want to use the write funcition defined in the com.sun.xml.tree.XmlDocument library. But this package is NOT included in JAXP package. Where shall I get this com.sun.xml.tree.XmlDocument library?
    Any help is greatly appreciated.

    You are WRITING an XML parser? Hopefully you meant that you were USING an XML parser. If you are using JAXP (which does include an XML parser) then you don't need that package to output XML. The example you got that idea from is obsolete.
    If your question is "How to use JAXP to write XML from a Document object?" then this is a FAQ here. Perhaps the search function is working and you could find the answer in this forum; I recall that it involves creating a Transformer whose input is the Document and whose output is wherever you wanted the XML to go to.

  • Switching off validation when reading XML

    Is it possible to switch off the validation of an XML file when opening it in FrameMaker?
    I removed the public and system identifier from the Doctype declaration in the file (tried also removing the whole doctype declaration too) - and removed any reference to the DTD in the structured application definition. But when opening such an XML file, FrameMaker always displays a message dialog saying "Unable to validate because no DTD or Schema was specified in the XML file. Continue reading the file?". Is it possible to suppress this warning - I don't want it?
    Thanks for any suggestions.

    Franz,
    There should be no write-access issues. You do not need to use an external DTD. For example, if your original XML document is:
    <document>
      <title>My summer vacation</title>
      <paragraph purpose="summary">I had fun.</paragraph>
    </document>
    instead of changing it to:
    <!DOCTYPE document SYSTEM "onthefly.dtd">
    <document>
      <title>My summer vacation</title>
      <paragraph purpose="summary">I had fun.</paragraph>
    </document>
    generate:
    <!DOCTYPE document SYSTEM [
    <!ELEMENT document ANY>
    <!ELEMENT title ANY>
    <!ELEMENT paragraph ANY>>
    <!ATTLIST paragraph>
      purpose CDATA #IMPLIED>
    ]>
    <document>
      <title>My summer vacation</title>
      <paragraph purpose="summary">I had fun.</paragraph>
    </document>

  • XML-tree in memory after closing XmlResults

    Hi,
    is there a way to have a parsed xml-tree in memory which represents XmlValue objects after I close corresponding XmlResults. I want to have smth like nu.xom.Document (or any analogues).
    The closest solution I've found so far is getting node handle, and then reconstruct XmlResults out of it by calling XmlContainer.getNode(java.lang.String). But it's not exactly what I want to have. I might not have an access to the container object, or it might be closed already. The another poor-man solution is to get a string by XmlValue.asString() and feed it into e.g. XOM's Builder.build(). But it's tremendously inefficient.
    Does anybody have smth better in his mind?
    P.S. I still want to retrieve documents lazily, but in case of a necessity get an XML-tree into memory.
    Thanks,
    Vyacheslav

    Thanks, George! I'm eager to have the new release :-) When is it approximately going to appear?
    Maybe XmlDocument.fetchAllData() can serve as a temporary solution for the current release?
    P.S. I was thinking about that integration with XOM (or something like this would be great).
    Vyacheslav
    Edited by: detonator413 on Feb 27, 2009 7:12 AM

  • Navigate in XML tree

    Hi
    I use oracle 10g.
    what is the best tool to navigate in XML tree and to analize it.when I dont no the exact structure of the xml.
    for example
    I need to do some action like DFS search and to set whiget to each tag
    is dbms_xmldom is the only option or there is some more simple component?
    Kfir

    What do you mean by "navigate"? Anyway currently there are 4 products that come to mind...
    1) SQL Developer 1.1 (freeware) you can find it here: http://sueharper.blogspot.com/2006/11/oracle-sql-developer-11-evaluation.html
    2) JDeveloper: download it via otn.oracle.com
    2) Latest version of TOAD (use google to find it)
    3) XMLSpy from Altova (use google to find it)

  • Does PHP 5.1.2 that comes shipped with OAS 10.1.3.4.0 support DOM/XML?

    Hello,
    We have installed OAS 10.1.3.0. PatchSet 10.1.3.4.0. It comes with PHP4 by default and the Oracle HTTP Server. We did the necessary instructions from Metalink and the README on how to enable PHP5. We can bring up Apache with no issues and phpinfo shows PHP 5.1.2. However, the DOM/XML is not enabled in this bundled PHP that came with OAS. Is DOM/XML supported? Is there an Oracle product that bundles PHP that supports DOM/XML? Thanks.

    You would have to make sure the extension is enabled when you build PHP yourself.
    "Installing OCI8 with Oracle Application Server on Linux" in the 2008 edition of http://www.oracle.com/technology/tech/php/pdf/underground-php-oracle-manual.pdf has some notes on installing PHP on AS.

  • DOM XML parser program

    Hi,
    I am trying to write a sample program using DOM xml parser in java to read the values in a XML file.
    please suggest me what are all the things I have to do for that.
    I know Java and XML. I want to know how to access values from XML file in java.
    Thanks
    Selvakumar

    Study up on the javax.xml.parsers API here at Sun. Next, download Xerces from Apache (xml.apache.org). Finally, take a tutorial.
    - Saish

  • Deleting Nodes from XML Tree (JTree)

    I have created a XML Tree(extended from JTree) using XNodes ( extended from DefaultMutableTreeNode)
    After some insertions, i need to delete certain nodes from the XML Tree.. but after deletion, XNode will be null.
    subroutine is as follows...
    appreciates any advice
    Thanx
    private XNode RemoveExtraNode( XNode xNode ){
    int child;
    String nodeType;
    XNode childNode=null;
    if ( (child=xNode.getChildCount() ) > 0){
    for(int i=0;i<child;i++){
    childNode=(XNode)xNode.getChildAt(i);          
         nodeType = childNode.getType();
         if(nodeType.equals("DTD") )
         childNode.removeFromParent();
    }//end for (int i=1;i<child;i++)
    }//endif((child=xNode.getChildCount())!=0)
    return xNode;     
    }//RemoveExtraNode

    Hi IKEDA
    Thanx for the reply.
    I have tried xNode.remove(childNode) b4 and it still return a null JTree.
    Anyway fyi i discover i can delete last child of xNode and return the correct java tree. therefore to delete a node of my choice i simply insert its next sibling nodes in its place and delete that particular node when it becomes the last child.

  • Java.io.NotSerializableException: com.sun.xml.tree.XmlDocument

    Hi,
    I got this error when my servlet is trying to parse a xml document:
    RuntimeRemoteException( java.io.WriteAbortedException: Writing aborted by exception; java.io.NotSerializableException: com.sun.xml.tree.XmlDocument )
    And my application runs ok when Tomcat is used as servlet container, but it runs into problem when iPlanet is used.
    Any idea?
    Thanks in advance!

    Thanks for your reply.
    The EJBs in the application are all stateless beans. The error happens at the servlet side, not the EJB side. When the servlet tries to parse the returned XML document using xalan 1.0, the error happened. However, I can not reproduce the error when I use Tomcat as servlet container.
    here is how I coded:
    XSLTProcessor processor = XSLTProcessorFactory.getProcessor(new org.apache.xalan.xpath.xdom.XercesLiaison());
    XSLTInputSource xmlSource = new XSLTInputSource(doc);
    XSLTInputSource xslSheet = new XSLTInputSource("file:"+xslFile);
    Writer out = new StringWriter();
    XSLTResultTarget xmlResult= new XSLTResultTarget(out);
    processor.process(xmlSource,xslSheet,xmlResult);

  • Installing a DOM XML Parser

    Hey, I apologize for the newbie question but I suppose this is as good a place as any for it. I'm in desperate need of a DOM XML parser and have decided upon the Apache parser, "Xerces," featured here. My problem is this, every time I make a move towards installing it, I get all mixed up at the mention of my "Apache, ant and forrest" installations that I am apparently supposed to have in order for this library to work. My question is, is this library only for use in web-based applications and thus requires Apache in order to run? I ask because the application I'm working on is simply for desktop usage and the users it will be distributed to will not have Apache installations. If somebody could help me out with a quick little walk-through on the installation of this library it would be IMMENSELY appreciated.
    Edited by: Tracekill on Sep 13, 2009 11:01 AM

    Study up on the javax.xml.parsers API here at Sun. Next, download Xerces from Apache (xml.apache.org). Finally, take a tutorial.
    - Saish

Maybe you are looking for