Может кто-нибудь объяснить, в чем разница между
/root/a[position()=1 or position()=2
и
/root/a[1 or 2]
?Я бы предположил, что 2nd является сокращенной формой 1st, но процессор Java XPath (Sun JDK 1.6.0) считает иначе.Ниже приведено мое тестовое приложение. Библиотека
libxml2, а также процессор XPath db2 также считают эти пути различными.Так что это не похоже на ошибку JDK.
import java.io.*;
import javax.xml.xpath.*;
import org.w3c.dom.*;
import org.xml.sax.InputSource;
public class XPathTest {
public static void main(String[] args) throws Exception {
//String xpathStr = "/root/a[position()=1 or position()=2]";
String xpathStr = "/root/a[1 or 2]";
XPathFactory xpf = XPathFactory.newInstance();
XPath xp = xpf.newXPath();
Reader irdr = new StringReader(
"<root><a name=\"first\"/><a name=\"second\"/><a name=\"third\"/></root>");
InputSource isrc = new InputSource(irdr);
XPathExpression expr = xp.compile(xpathStr);
Object result = expr.evaluate(isrc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
Node node = nodes.item(i);
Element element = (Element) node;
System.out.print(element.getNodeName() + " " + element.getAttributeNode("name"));
System.out.println();
}
}
}