Hi Ralf, Thanks so much for your response.
I tried you mentioned, but it did not work. DocumentTypeImpl dtd = (DocumentTypeImpl)((DocumentImpl)doc).getDoctype(); NamedNodeMap map = dtd.getElements(); and when I do this: System.out.println("length="+map.getLength()); It prints: length=0 I am sure it recognizing my doctype because when I call: System.out.println("name="+dtd.getName()); It does print the name of the doctype. Any idea why I am getting length=0, there is 88 elements defined in my doctype. I am using the latest version of xerces (version 1.02) Thanks, Chris ------------------------- snip ------------------------------- import org.apache.xerces.parsers.DOMParser; import org.apache.xerces.dom.DocumentImpl; import org.apache.xerces.dom.DocumentTypeImpl; import org.xml.sax.Parser; import org.xml.sax.ErrorHandler; import org.xml.sax.SAXParseException; import org.w3c.dom.DocumentType; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import org.w3c.dom.Document; public class XMLTester implements ErrorHandler { /** * Constructor. */ public XMLTester () { } public static void main(String args[]) throws Exception { DOMParser parser = new DOMParser(); parser.setFeature("http://xml.org/sax/features/validation", true); parser.setErrorHandler(this); parser.parse("test.xml"); Document doc = parser.getDocument(); DocumentTypeImpl dtd = (DocumentTypeImpl)((DocumentImpl)doc).getDoctype(); NamedNodeMap map = dtd.getElements(); System.out.println("name="+dtd.getName()); System.out.println("length="+map.getLength()); for (int i=0; i<map.getLength(); i++) { System.out.println(map.item(i)); } public void error(SAXParseException exception) { System.err.println("ERROR: "+exception); } public void fatalError(SAXParseException exception) { System.err.println("FATAL ERROR: "+exception); } public void warning(SAXParseException exception) { System.err.println("WARNING: "+exception); } } ------------------------- snip ------------------------------- "Ralf I. Pfeiffer" wrote: > > With the current DOMParser you can: > > DocumentTypeImpl dtd = ((DocumentImpl)doc).getDoctype(); > NamedNodeMap map = dtd.getElements(); > > Chris Gokey wrote: > > > Hi everyone, > > > > I'm hoping that someone could point me in the right direction regarding > > what > > classes I need in order to access element definitions in a DTD. > > > > Consider the following DTD: > > > > <!ELEMENT Personnel (Role+, First_Name?, Middle_Name?, Last_Name?, > > Email*, Phone*, FAX*, Address?)> > > > > <!ELEMENT Role (#PCDATA)> > > <!ELEMENT First_Name (#PCDATA)> > > <!ELEMENT Middle_Name (#PCDATA)> > > <!ELEMENT Last_Name (#PCDATA)> > > <!ELEMENT Email (#PCDATA)> > > <!ELEMENT Phone (#PCDATA)> > > <!ELEMENT FAX (#PCDATA)> > > <!ELEMENT Address (#PCDATA)> > > > > I'd like an API something like this: > > > > // some class that would parse a DTD and create an intermediate > > representation > > for > > // accessing its elements (like a DOM). > > DTDParser parser = new DTDParser(); > > parser.parse("dif.dtd"); > > > > ElementList list = parser.getElements(); > > int len = list.getLength(); > > for (int i=0; i<len; i++) { > > String elementName = list.item(i).getElementName(); > > String definition = list.item(i).getDefintion(); > > System.out.println("elementName="+elementName); > > System.out.println("definition="+defintion); > > System.out.println("\n"); > > } > > > > In which the code above might produce the following output: > > > > elementName = Personnel > > definition = (Role+, First_Name?, Middle_Name?, Last_Name?, > > Email*, Phone*, FAX*, Address?) > > > > elementName = Role > > definition = (#PCDATA) > > > > elementName = FirstName > > defintion = (#PCDATA) > > > > . > > . > > . > > > > I would imagaine the Xerces library must have something to help me achieve > > this functionality? > > > > Thanks in advanced... > > > > Chris > > > > -- > > Christopher D. Gokey, Raytheon ITSS, NASA/GCMD > > 18 Martin Road, Shelburne Falls, MA 01370 > > Phone: Voice (413) 625-8129 / FAX 208-248-9055 > > [EMAIL PROTECTED] / http://gcmd.nasa.gov > > -- > <person name="Ralf I. Pfeiffer" > loc="IBM JTC, Cupertino, CA" > email1="[EMAIL PROTECTED]" > email2="[EMAIL PROTECTED]" > /> > > -- Christopher D. Gokey, Raytheon ITSS, NASA/GCMD 18 Martin Road, Shelburne Falls, MA 01370 Phone: Voice (413) 625-8129 / FAX 208-248-9055 [EMAIL PROTECTED] / http://gcmd.nasa.gov