How do I parse a DTD into an in-memory Java object, like a TreeMap or perhaps some XML specific collection class?
I asked this question the other day, and got an answer that the DocumentBuilder parse method should handle the parsing of a DTD – since a DTD IS XML.
However, I get basic parsing errors when inputting a simple DTD. The code works fine on XML documents, but not on DTDs. The code I’m using to parse the DTD looks like this:
public static void main( String argArgs[] ) { { File dtdFile = new File( "C:\\APIS\\WorkSpace\\tv.dtd" ); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document document = db.parse( dtdFile ); parseChildrenRecursivly( document.getChildNodes(); ); }
public void parseChildrenRecursivly( NodeList argNodeList ) {
if (argNodeList == null) { return; }
Node node; for (int i=0; i<argNodeList.getLength(); i++) { node = argNodeList.item( i ); if (node.getNodeType() != Node.TEXT_NODE) { System.out.println( "node.nodeName = " + node.getNodeName() + "; " + "node.nodeType = " + Short.toString( node.getNodeType() ) + "; " + "node.localName = " + node.getLocalName() + "; " + "node.namespaceUri = " + node.getNamespaceURI() + "; " + "node.nodeValue = " + node.getNodeValue() + "; " + "" ); parseChildrenRecursivly( node.getChildNodes() ); } } // for }
However, I get errors when making the attempt:
[Fatal Error] :-1:-1: Premature end of file. ERR:> Exception Premature end of file.
The DTD I’m trying to parse is just an example. It looks like this, where the elements are embedded inside the DOCTYPE tag:
<!DOCTYPE TVSCHEDULE [
<!ELEMENT TVSCHEDULE (CHANNEL+)> <!ELEMENT CHANNEL (BANNER, DAY+)> <!ELEMENT BANNER (#PCDATA)> <!ELEMENT DAY ((DATE, HOLIDAY) | (DATE, PROGRAMSLOT+))+> <!ELEMENT HOLIDAY (#PCDATA)> <!ELEMENT DATE (#PCDATA)> <!ELEMENT PROGRAMSLOT (TIME, TITLE, DESCRIPTION?)> <!ELEMENT TIME (#PCDATA)> <!ELEMENT TITLE (#PCDATA)> <!ELEMENT DESCRIPTION (#PCDATA)>
<!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED> <!ATTLIST CHANNEL CHAN CDATA #REQUIRED> <!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED> <!ATTLIST TITLE RATING CDATA #IMPLIED> <!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>
]>
If I just parse the ELEMENTS, by removing the DOCTYPE tag, I still get errors:
Exception The markup in the document preceding the root element must be well-formed. [Fatal Error] tv.dtd:3:3: The markup in the document preceding the root element must be well-formed.
Anybody have a clue how to parse a DTD, so I can get an in-memory structure of the DTD in Java?
Scott Andrews Principle Software Engineer Concurrent Technologies Corporation (814) 269 6580 (Monday, Wednesday, Friday) (814) 632 9559 (Tuesday, Thursday) (814) 880 8522 (Cell)
|
- Re: How do I parse a DTD in Java? Andrews, Scott
- Re: How do I parse a DTD in Java? Anne Thomas Manes
- RE: How do I parse a DTD in Java? Andrews, Scott
- Re: How do I parse a DTD in Java? Paul Libbrecht
- RE: How do I parse a DTD in Java? Andrews, Scott
- Re: How do I parse a DTD in Java? Gus Heck
- Re: How do I parse a DTD in Java? Henry Miller
- Re: How do I parse a DTD in Java? Paul Libbrecht
- Re: How do I parse a DTD in Java? Henry Miller
- Re: How do I parse a DTD in Java? Paul Libbrecht
- Re: How do I parse a DTD in Java? J.Pietschmann