Java tutorial
import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.ErrorHandler; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class TryDOM implements ErrorHandler { public static void main(String args[]) throws Exception { DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); builderFactory.setNamespaceAware(true); builderFactory.setValidating(true); builderFactory.setIgnoringElementContentWhitespace(true); DocumentBuilder builder = null; builder = builderFactory.newDocumentBuilder(); builder.setErrorHandler(new TryDOM()); Document xmlDoc = builder.parse(new File("y.xml")); DocumentType doctype = xmlDoc.getDoctype(); System.out.println("DOCTYPE node:\n" + getDoctypeString(doctype)); listNodes(xmlDoc.getDocumentElement(), ""); } private static String getDoctypeString(DocumentType doctype) { String str = doctype.getName(); StringBuffer doctypeStr = new StringBuffer("<!DOCTYPE ").append(str); final char QUOTE = '\"'; if ((str = doctype.getSystemId()) != null) doctypeStr.append(" SYSTEM ").append(QUOTE).append(str).append(QUOTE); else if ((str = doctype.getPublicId()) != null) // Check for a public ID doctypeStr.append(" PUBLIC ").append(QUOTE).append(str).append(QUOTE); if ((str = doctype.getInternalSubset()) != null) doctypeStr.append('[').append(str).append(']'); return doctypeStr.append('>').toString(); // Append '>', return the string } static void listNodes(Node node, String indent) { String nodeName = node.getNodeName(); System.out.println(indent + nodeName + " Node, type is " + node.getClass().getName() + ":"); System.out.println(node); if (node instanceof Element && node.hasAttributes()) { NamedNodeMap attrs = node.getAttributes(); for (int i = 0; i < attrs.getLength(); i++) { Attr attribute = (Attr) attrs.item(i); System.out.println(indent + attribute.getName() + "=" + attribute.getValue()); } } NodeList list = node.getChildNodes(); if (list.getLength() > 0) { System.out.println(indent + "Child Nodes of " + nodeName + " are:"); for (int i = 0; i < list.getLength(); i++) listNodes(list.item(i), indent + " "); } } public void fatalError(SAXParseException spe) throws SAXException { System.out.println("Fatal error at line " + spe.getLineNumber()); System.out.println(spe.getMessage()); throw spe; } public void warning(SAXParseException spe) { System.out.println("Warning at line " + spe.getLineNumber()); System.out.println(spe.getMessage()); } public void error(SAXParseException spe) { System.out.println("Error at line " + spe.getLineNumber()); System.out.println(spe.getMessage()); } }<?xml version="1.0"?> <!DOCTYPE circle [ <!ELEMENT circle (position)> <!ATTLIST circle radius CDATA #REQUIRED > <!ELEMENT position EMPTY> <!ATTLIST position x CDATA #REQUIRED y CDATA #REQUIRED > ]> <circle radius="15"> <position x="30" y="50"/> </circle>