| Refresh | Home EGTry.com

create xml document by using dom api


Dom_Creation.java

/*
 * Copyright@ 2011 www.egtry.com
 */

package egtry.xml;


import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.StringWriter;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;



public class Dom_Creation {

  public static void main(String[] args) throws Exception {
	  //step 1. create DocumentBuilder
	  DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
	  DocumentBuilder domBuilder=factory.newDocumentBuilder();
	  
	  //step 2. create the root Node
	  Document doc=domBuilder.newDocument();
	  Element root=doc.createElement("root");
	  doc.appendChild(root);
	  
	  //step 3. Add an attribute
	  root.setAttribute("color", "red");
	  
	  //step 4. Add a child
	  Element child=doc.createElement("p");
	  root.appendChild(child);
	  Text text=doc.createTextNode("This is plain text");
	  child.appendChild(text);
	  
	  //step 4. output xml by Transformer
	  TransformerFactory transformerFactory=TransformerFactory.newInstance();
	  Transformer transformer=transformerFactory.newTransformer();
	  transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
	  transformer.setOutputProperty(OutputKeys.INDENT, "yes");
	  StringWriter out=new StringWriter();
	  StreamResult result=new StreamResult(out);
	  transformer.transform(new DOMSource(doc), result);
	  
	  System.out.println(out.toString());

  }
  
  public static void printNode(Node node) {
	  //node and its attributes
	  String name=node.getNodeName();
	  System.out.print("<"+name);
	  if (node.hasAttributes()) {
		  NamedNodeMap attributes=node.getAttributes();
		  for(int i=0; i<attributes.getLength(); i++) {
			  Node attribute=attributes.item(i);
			  System.out.print(" "+attribute.getNodeName()+"=\""+attribute.getNodeValue()+"\"");
		  }
		  
	  }
	  System.out.println(">");
	  
	  //get child nodes
	  NodeList childList=node.getChildNodes();
	  for(int i=0; i<childList.getLength(); i++ ) {
		  Node child=childList.item(i);
		  printNode(child);
	  }
	  
	  
	  System.out.println("</"+name+">");
	  
  }
}



Output

<root color="red">
<p>This is plain text</p>
</root>