Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java XPath-限制范围-Saxon s9api_Java_Xml_Xpath_Saxon - Fatal编程技术网

Java XPath-限制范围-Saxon s9api

Java XPath-限制范围-Saxon s9api,java,xml,xpath,saxon,Java,Xml,Xpath,Saxon,我正在使用Saxon的s9api包进行XPath查找 我想将搜索限制为仅搜索1个节点及其子节点 <root> <b> <a>foo</a> </b> <b> <a>bar</a> </b> </root> 但我总是从文档根目录中获取结果 我尝试了以下XPath: /b/a->不返回任何内容 b/a->不返回任何内

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

我想将搜索限制为仅搜索1个节点及其子节点

<root>
    <b>
        <a>foo</a>
    </b>
    <b>
        <a>bar</a>
    </b>
</root>
但我总是从文档根目录中获取结果

我尝试了以下XPath:

  • /b/a->不返回任何内容
  • b/a->不返回任何内容
  • /b/a->不返回任何内容
  • //b/a->返回两个元素

  • 注意:我知道我可以获得传递的XdmNode索引并将其放入XPath中。但是我希望从给定的XdmNode进行搜索,这样就可以对任何文档中的任何节点进行搜索,而不必担心如何找到该节点。

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

    XPathFactory xPathfactory = XPathFactory.newInstance();
    XPath xpath = xPathfactory.newXPath();
    XPathExpression expr = xpath.compile(path);
    NodeList xpathResult = (NodeList) expr.evaluate(node, XPathConstants.NODESET);
    
    最后一行是有趣的一行


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

    试试
    /a
    或者干脆
    a
    。上下文已经引用了
    b
    ,因此XPath编号3会错误地尝试查找不存在的嵌套
    b

    两者都起作用。非常感谢。在这里,我认为我的问题在于Java/Saxon,而不是XPath/为了进一步说明这一点:以“/”开头的路径表达式搜索包含上下文项的文档,而不是以上下文项为根的子树。要搜索以上下文项为根的子树,它应该以“/”开头(或仅以axis步骤开头)。我使用Saxon,因为它支持高达3.1版的XPath。
    XPathFactory xPathfactory = XPathFactory.newInstance();
    XPath xpath = xPathfactory.newXPath();
    XPathExpression expr = xpath.compile(path);
    NodeList xpathResult = (NodeList) expr.evaluate(node, XPathConstants.NODESET);