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);
}
}
}
}