XML Java

import java.io.OutputStream;
import java.io.PrintStream;
import javax.xml.transform.Transformer;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.sun.org.apache.xpath.internal.XPathAPI;
public class MainClass {
  public static void print(Node node, OutputStream os) {
    PrintStream ps = new PrintStream(os);
    switch (node.getNodeType()) {
    case Node.ELEMENT_NODE:
      ps.print("<" + node.getNodeName());
      NamedNodeMap map = node.getAttributes();
      for (int i = 0; i < map.getLength(); i++) {
        ps.print(" " + map.item(i).getNodeName() + "=\""
            + map.item(i).getNodeValue() + "\"");
      }
      ps.println(">");
      return;
    case Node.ATTRIBUTE_NODE:
      ps.println(node.getNodeName() + "=\"" + node.getNodeValue() + "\"");
      return;
    case Node.TEXT_NODE:
      ps.println(node.getNodeValue());
      return;
    case Node.CDATA_SECTION_NODE:
      ps.println(node.getNodeValue());
      return;
    case Node.PROCESSING_INSTRUCTION_NODE:
      ps.println(node.getNodeValue());
      return;
    case Node.DOCUMENT_NODE:
    case Node.DOCUMENT_FRAGMENT_NODE:
      ps.println(node.getNodeName() + "=" + node.getNodeValue());
      return;
    }
  }
  static void evalXPath(Document doc, Transformer serializer, String absolute,
      String relative) throws Exception {
    NodeList list = XPathAPI.selectNodeList(doc, absolute, doc);
    Node node = null;
    // 
    for (int i = 0; (node = list.item(i)) != null; i++) {
      NodeList innerList = XPathAPI.selectNodeList(node, relative, doc);
      Node innerNode = null;
      for (int j = 0; (innerNode = innerList.item(j)) != null; j++) {
        print(innerNode, System.out);
      }
    }
  }
}