次の 2 つのコード セグメントは同じことを行いますが、1 つは式をコンパイルし、もう 1 つは式を評価するだけです。
//1st option - compile and run
//make the XPath object compile the XPath expression
XPathExpression expr = xpath.compile("/inventory/book[3]/preceding-sibling::book[1]");
//evaluate the XPath expression
Object result = expr.evaluate(doc, XPathConstants.NODESET);
nodes = (NodeList) result;
//print the output
System.out.println("1st option:");
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println("i: " + i);
System.out.println("*******");
System.out.println(nodeToString(nodes.item(i)));
System.out.println("*******");
}
//2nd option - evaluate an XPath expression without compiling
Object result2 = xpath.evaluate("/inventory/book[3]/preceding-sibling::book[1]",doc,XPathConstants.NODESET);
System.out.println("2nd option:");
nodes = (NodeList) result2;
//print the output
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println("i: " + i);
System.out.println("*******");
System.out.println(nodeToString(nodes.item(i)));
System.out.println("*******");
}
出力はまったく同じです。コンパイルと単に評価することの違いは何ですか? 式をコンパイルする/コンパイルしないのはなぜですか?