Mega Code Archive

 
Categories / Java / XML
 

Access Document type

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>