/*
DOMUtil.java
This utility class contains static methods to:
• Write a DOM document to a file
• Recursively print a specified node, and then print all of its children
• Parse the XML file and create a DOM object in memory
• Count elements in a document by tag name
Compiled By:
Kaustubh Verma
www.campusfever.wordpress.com
*/
/*
*
*/
import java.io.IOException;
import java.io.File;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.Result;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import org.xml.sax.SAXParseException;
import org.xml.sax.SAXException;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
* Sample Utility class to work with DOM document
*/
public class DOMUtil {
/** Prints the specified node, then prints all of its children. */
public static void printDOM(Node node) {
int type = node.getNodeType();
switch (type) {
// print the document element
case Node.DOCUMENT_NODE: {
System.out.println("");
printDOM(((Document)node).getDocumentElement());
break;
}
// print element with attributes
case Node.ELEMENT_NODE: {
System.out.print("<");
System.out.print(node.getNodeName());
NamedNodeMap attrs = node.getAttributes();
for (int i = 0; i < attrs.getLength(); i++) {
Node attr = attrs.item(i);
System.out.print(" " + attr.getNodeName().trim() +
"=\"" + attr.getNodeValue().trim() +
"\"");
}
System.out.println(">");
NodeList children = node.getChildNodes();
if (children != null) {
int len = children.getLength();
for (int i = 0; i < len; i++)
printDOM(children.item(i));
}
break;
}
// handle entity reference nodes
case Node.ENTITY_REFERENCE_NODE: {
System.out.print("&");
System.out.print(node.getNodeName().trim());
System.out.print(";");
break;
}
// print cdata sections
case Node.CDATA_SECTION_NODE: {
System.out.print(" System.out.print(node.getNodeValue().trim());
System.out.print("]]>");
break;
}
// print text
case Node.TEXT_NODE: {
System.out.print(node.getNodeValue().trim());
break;
}
// print processing instruction
case Node.PROCESSING_INSTRUCTION_NODE: {
System.out.print(" System.out.print(node.getNodeName().trim());
String data = node.getNodeValue().trim(); {
System.out.print(" ");
System.out.print(data);
}
System.out.print("?>");
break;
}
}
if (type == Node.ELEMENT_NODE) {
System.out.println();
System.out.print("");
System.out.print(node.getNodeName().trim());
System.out.print('>');
}
}
/**
* Parse the XML file and create Document
* @param fileName
* @return Document
*/
public static Document parse(String fileName) {
Document document = null;
// Initiate DocumentBuilderFactory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// To get a validating parser
factory.setValidating(false);
// To get one that understands namespaces
factory.setNamespaceAware(true);
try {
// Get DocumentBuilder
DocumentBuilder builder = factory.newDocumentBuilder();
// Parse and load into memory the Document
document = builder.parse( new File(fileName));
return document;
} catch (SAXParseException spe) {
// Error generated by the parser
System.out.println("\n** Parsing error , line " + spe.getLineNumber()
+ ", uri " + spe.getSystemId());
System.out.println(" " + spe.getMessage() );
// Use the contained exception, if any
Exception x = spe;
if (spe.getException() != null)
x = spe.getException();
x.printStackTrace();
} catch (SAXException sxe) {
// Error generated during parsing
Exception x = sxe;
if (sxe.getException() != null)
x = sxe.getException();
x.printStackTrace();
} catch (ParserConfigurationException pce) {
// Parser with specified options can't be built
pce.printStackTrace();
} catch (IOException ioe) {
// I/O error
ioe.printStackTrace();
}
return null;
}
/**
* This method writes a DOM document to a file
* @param filename
* @param document
*/
public static void writeXmlToFile(String filename, Document document) {
try {
// Prepare the DOM document for writing
Source source = new DOMSource(document);
// Prepare the output file
File file = new File(filename);
Result result = new StreamResult(file);
// Write the DOM document to the file
// Get Transformer
Transformer xformer = TransformerFactory.newInstance().newTransformer();
// Write to a file
xformer.transform(source, result);
} catch (TransformerConfigurationException e) {
System.out.println("TransformerConfigurationException: " + e);
} catch (TransformerException e) {
System.out.println("TransformerException: " + e);
}
}
/**
* Count Elements in Document by Tag Name
* @param tag
* @param document
* @return number elements by Tag Name
*/
public static int countByTagName(String tag, Document document){
NodeList list = document.getElementsByTagName(tag);
return list.getLength();
}
}
now create the main class
/*
* Create_DOM.java
*
* Created on March 24, 2008, 4:28 PM
*
* Created by : Kaustubh Verma
www.campusfever.wordpress.com
www.javagurug.blogspot.com
* Created on March 24, 2008, 3:54 PM
*
* Purpose : To demostrate the insertion of root node and save it in "fisrt.xml"
* the output is
the reason for
*/
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
// import dom.Element for root node
import org.w3c.dom.Element;
public class Create_DOM {
private Document document = null;
/** Creates a new instance of Create_DOM */
public Create_DOM() {
//
DocumentBuilder builder = null;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try{
builder = factory.newDocumentBuilder();
document = builder.newDocument();
}
catch (ParserConfigurationException e)
{
e.printStackTrace();
}
// Insert Root Order
Element root = (Element) document.createElement("BOOKS");
document.appendChild(root);
// Normalizing the DOM
document.getDocumentElement().normalize();
}
//
public Document getDocument(){
return document;
}
public static void main(String ...args){
Document document = null;
// Build new DOM Document
Create_DOM cDOM = new Create_DOM();
document = cDOM.getDocument();
// Print XML content
DOMUtil.printDOM(document);
// Write to a file, give the name of OUTPUT XML FILE
DOMUtil.writeXmlToFile("first.xml",document);
}
}
No comments:
Post a Comment