Java XPath - 限制范围 - Saxon s9api

时间:2016-06-07 15:02:09

标签: java xml xpath saxon

我正在使用Saxon的s9api软件包进行XPath查找。

我想将搜索限制为仅1个节点及其后代。

a <- data.table(matrix(4,4,4))
b <- a

b[,`:=`(V5=6,V4=2)]
print(a)

我作为XdmNode(bNode)传递/ root / b [2],我正在尝试搜索它。

<root>
    <b>
        <a>foo</a>
    </b>
    <b>
        <a>bar</a>
    </b>
</root>

但我总是从Document root获得结果!

我尝试过以下XPath:

  1. / b / a - &gt;什么都不返回
  2. b / a - &gt;什么都不返回
  3. ./ b / a - &gt;什么都不返回
  4. // b / a - &gt;返回两个元素
  5. 注意:我知道我可以获取传递的XdmNode索引并将其放入我的XPath中。但我希望从给定的XdmNode进行搜索,以便可以对任何文档中的任何节点进行搜索,而且我不必担心该节点是如何被找到的。

2 个答案:

答案 0 :(得分:1)

尝试./aa。上下文已经引用b,因此您的XPath号3会错误地尝试找到不存在的嵌套b

答案 1 :(得分:0)

在我的代码中,它是这样的:

XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr = xpath.compile(path);
NodeList xpathResult = (NodeList) expr.evaluate(node, XPathConstants.NODESET);

最后一行是有趣的。

我不确定这是否是撒克逊和/或正确的版本。可能试一试:)