permaculture playing cards*
The moose likes XML and Related Technologies and the fly likes Validating XML against DTD Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Engineering » XML and Related Technologies
Bookmark "Validating XML against DTD" Watch "Validating XML against DTD" New topic
Author

Validating XML against DTD

Jay Doshi
Greenhorn

Joined: Aug 28, 2001
Posts: 1
In our application we have a XML coming in. We want to validate the data coming in with respect to the DTD. (E.g maximum length for a particular tag of maximum integer value etc)
Can anyone help me with various alternatives to do so and information on performance for each approach
Thanks
Vels Manian
Greenhorn

Joined: Jun 28, 2001
Posts: 22
hi,
If u are using jaxp.jar and DocumentParserFactory. I have a method of validating the document.
Just set the setValidating(true) for the DocumentParserFactory, once u apply parse() over the Parser object the document will be validated against the DTD and if u have any error a SAXParserException will be thrown.
Hope this helps u
cheers
Vels
Rob Bass
Ranch Hand

Joined: Aug 28, 2001
Posts: 67
I am having a problemm doing what you suggested. I set validate to true and purposely fudged the xml file, and the file parsed without any problems???
Maybe I am doing something totally wrong, here is my XML:
<?xml version="1.0"?>
<!DOCTYPE book SYSTEM "bookgram.dtd">
<book>
<title>Professional Java Programming</title>
<author>Brett Spell</author>
<publisher>Wrox Press</publisher>
<tableOfContents showPageNumbers="Yes">
<tocEntry>Printing</tocEntry>
<tocEntry>Cut and Paste</tocEntry>
<tocEntry>Drag and Drop</tocEntry>
</tableOfContents>
</book>
and dtd:
<!ELEMENT book (title, author, publisher, tableOfContents)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT publisher (#PCDATA)>
<!ELEMENT tableOfContents (tocEntry+)>
<!ATTLIST tableOfContents
showPageNumbers CDATA "yes"
>
<!ELEMENT tocEntry (#PCDATA)>

My java code:
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
this.fileNameNPath = fileToOpen;
factory.setValidating(true);
factory.setNamespaceAware(true);
this.doc = builder.parse(fileToOpen);
return true;
I edited the XML like this:
<?xml version="1.0"?>
<!DOCTYPE book SYSTEM "bookgram.dtd">
<book>
<title>Professional Java Programming</title>
<author>Brett Spell</author>
<addsomecrap/>
<publisher>Wrox Press</publisher>
<tableOfContents showPageNumbers="Yes">
<tocEntry>Printing</tocEntry>
<tocEntry>Cut and Paste</tocEntry>
<tocEntry>Drag and Drop</tocEntry>
</tableOfContents>
</book>
I then thought when I ran my Java code it would bomb but it still works,
the XML no longer confirms to the DTD, why is it still able to parse
without error???
HELP
Rob

 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Validating XML against DTD