У меня есть следующие два сегмента кода, которые делают то же самое, за исключением того, что один компилирует выражение, а одно просто оценивает его.Зачем компилировать выражение XPath?
//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("*******");
}
Выходной сигнал точно такой же. В чем разница между компиляцией и просто оценкой? Зачем компилировать/не компилировать выражение?
Если вы используете один и тот же xpath снова и снова, скомпилируйте его, чтобы сэкономить время. Если вы используете разные xpath каждый раз, когда вы идете (например, вы генерируете его на лету), нет смысла компилировать. – shakurov