Mega Code Archive

 
Categories / Java / XML
 

Use DOM parser to deal with XML document with attributes

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 MainClass 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 MainClass());     Document xmlDoc = builder.parse(new File("y.xml"));     DocumentType doctype = xmlDoc.getDoctype();     System.out.println("DOCTYPE node:\n" + doctype);     listNodes(xmlDoc.getDocumentElement(), "");   }   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(indent + " " + node);     if (node instanceof Element && node.hasAttributes()) {       System.out.println(indent + "Element Attributes are:");       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>