Sunday, April 27, 2008

Creating a root element BOOKS and write it to a file "first.xml" using DOM

first create a DOMUtil class

/*
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 is due to no clild of root

*/


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: