--- /dev/null
+import javax.xml.xpath.*;
+import org.xml.sax.*;
+import org.w3c.dom.*;
+import javax.xml.transform.*;
+import javax.xml.transform.dom.*;
+import javax.xml.transform.stream.*;
+
+public class XPathEval {
+
+
+ public static void main(String args[]) {
+ try {
+
+
+ XPath xpath = XPathFactory.newInstance().newXPath();
+ String expression = args[1];
+ InputSource inputSource = new InputSource(args[0]);
+ long startTime = System.nanoTime();
+ NodeList nodes = (NodeList) xpath.evaluate(expression, inputSource, XPathConstants.NODESET);
+ long evalTime = (System.nanoTime() - startTime) / 1000000;
+ Transformer serializer = TransformerFactory.newInstance().newTransformer();
+ serializer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
+ StreamResult o = new StreamResult(System.out);
+ startTime = System.nanoTime();
+ System.out.println("<xml_result num=\"1\">");
+ for(int i = 0; i < nodes.getLength(); i++){
+ Node n = nodes.item(i);
+ switch (n.getNodeType()) {
+ case Node.ATTRIBUTE_NODE:
+ System.out.print (n.getNodeName() + "=" + n.getNodeValue());
+ break;
+ default:
+ serializer.transform(new DOMSource(nodes.item(i)), o);
+ break;
+ };
+ System.out.println();
+ };
+ System.out.println("</xml_result>");
+ long printTime = (System.nanoTime() - startTime) / 1000000;
+ System.err.println("evaluation time: " + evalTime + "ms");
+ System.err.println("serialization time: " + printTime + "ms");
+ } catch (XPathException e) {
+ System.out.println (e.getCause());
+ } catch (Exception e) {
+ System.out.println(e);
+ };
+
+
+ }
+}