KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > igfay > util > PrettyPrinter


1 package org.igfay.util;
2
3 import javax.xml.parsers.DocumentBuilder JavaDoc;
4 import javax.xml.parsers.DocumentBuilderFactory JavaDoc;
5 import javax.xml.parsers.ParserConfigurationException JavaDoc;
6
7 import org.w3c.dom.Document JavaDoc;
8 import org.w3c.dom.Element JavaDoc;
9 import org.w3c.dom.NamedNodeMap JavaDoc;
10 import org.w3c.dom.Node JavaDoc;
11 import org.w3c.dom.NodeList JavaDoc;
12
13 public class PrettyPrinter {
14     public static void printDoc(String JavaDoc url) throws ParserConfigurationException JavaDoc {
15         System.out.println("Pretty printing XML file: " + url + ".");
16         // Creating a parser factory (JAXP)
17
// It can be configured at runtime, which implementation
18
// (Xerces, Crimson, ...) is to be used,
19
// for example via the Java systems property.
20
DocumentBuilderFactory JavaDoc parserFactory = DocumentBuilderFactory.newInstance();
21         // Configuring the parsers that the factory will create (JAXP)
22
parserFactory.setValidating(true);
23         parserFactory.setNamespaceAware(true);
24         parserFactory.setExpandEntityReferences(true);
25         // Creating a parser (JAXP)
26
DocumentBuilder JavaDoc parser = parserFactory.newDocumentBuilder();
27         try {
28             // Using the parser to build the DOM document (JAXP)
29
Document JavaDoc doc = parser.parse(url);
30             // All further computations are based on DOM, no longer on JAXP.
31
printNode(doc); // print nodes recursively
32
} catch (Exception JavaDoc e) {
33             System.out.println("Error in parsing: " + e.getMessage());
34         }
35     };
36
37     public static void printNode(Node JavaDoc node) {
38         // This method uses only DOM functionality.
39
switch (node.getNodeType()) {
40         case Node.DOCUMENT_NODE:
41             System.out.println("<?xml version=\"1.0\" encoding=\"UTF8\"?>");
42             Document JavaDoc doc = (Document JavaDoc) node;
43             printNode(doc.getDocumentElement());
44             break;
45         case Node.ELEMENT_NODE:
46             Element JavaDoc element = (Element JavaDoc) node;
47             element.normalize();
48             String JavaDoc name = node.getNodeName();
49             System.out.print("<" + name);
50             NamedNodeMap JavaDoc attributes = node.getAttributes();
51             for (int i = 0; i < attributes.getLength(); i++) {
52                 Node JavaDoc attr = attributes.item(i);
53                 System.out.print(" " + attr.getNodeName() + "=\"" + attr.getNodeValue() + "\"");
54             }
55             ;
56             System.out.println(">");
57             NodeList JavaDoc children = node.getChildNodes();
58             if (children != null) {
59                 for (int i = 0; i < children.getLength(); i++) {
60                     printNode(children.item(i));
61                 }
62                 ;
63             }
64             ;
65             System.out.println("</" + name + ">");
66             break;
67         case Node.TEXT_NODE:
68         case Node.CDATA_SECTION_NODE:
69             System.out.println(node.getNodeValue() + ""); // needs filtering!
70
break;
71         case Node.PROCESSING_INSTRUCTION_NODE:
72             break;
73         case Node.ENTITY_REFERENCE_NODE:
74             System.out.println("&" + node.getNodeName() + ";");
75             break;
76         case Node.DOCUMENT_TYPE_NODE:
77             break;
78         }
79         ;
80     };
81
82     public static void main(String JavaDoc[] args) {
83         if (args.length != 1) {
84             System.out.println("Usage: java PrettyPrinter [XML URL]");
85             System.exit(0);
86         }
87         ;
88
89         String JavaDoc url = args[0];
90
91         try {
92             PrettyPrinter.printDoc(url);
93         } catch (ParserConfigurationException JavaDoc e) {
94             System.out.println("Pretty printer failed due to parser" + "configuration error.");
95             System.exit(0);
96         }
97     };
98 }
99
100
Popular Tags