Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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
Xml XPATH表达式,用于选择具有两个子项且具有子项的父项_Xml_Xpath - Fatal编程技术网

Xml XPATH表达式,用于选择具有两个子项且具有子项的父项

Xml XPATH表达式,用于选择具有两个子项且具有子项的父项,xml,xpath,Xml,Xpath,我的XML结构与此类似: <Header> <ElementA> <ElementB> <ElementC/> <ElementC/> </ElementB> <ElementB/> </ElementA> </Header> 我可能只是回答了我自己的问题: /Header/E

我的XML结构与此类似:

<Header>
    <ElementA>
        <ElementB>
            <ElementC/>
            <ElementC/>
        </ElementB>
        <ElementB/>
    </ElementA>
</Header>

我可能只是回答了我自己的问题:

/Header/ElementA[ElementB[ElementC]/following-sibling::ElementB[ElementC]]

似乎有效。它以前似乎不起作用的原因是我的文档,其中所有88000行,都没有出现这种模式。这可能表明生成它的代码中存在错误,而不是XPATH表达式中的错误。

我可能刚刚回答了我自己的问题:

/Header/ElementA[ElementB[ElementC]/following-sibling::ElementB[ElementC]]

似乎有效。它以前似乎不起作用的原因是我的文档,其中所有88000行,都没有出现这种模式。这可能表明生成它的代码中存在错误,而不是XPATH表达式中的错误。

嵌套谓词完成了任务:

/Header/ElementA[ElementB[following-sibling::ElementB/ElementC]/ElementC]

嵌套谓词完成作业:

/Header/ElementA[ElementB[following-sibling::ElementB/ElementC]/ElementC]

请注意,您不必显式搜索以下同级轴。这两种模式将返回相同的结果:

foo[bar/following-sibling::bar]

因此,您的模式可以简单到:

/Header/ElementA[ElementB[ElementC][2]]

它将查找具有两个或多个ElementB子元素的ElementA元素,每个元素都有一个ElementC子元素。

请注意,您不必显式搜索以下同级轴。这两种模式将返回相同的结果:

foo[bar/following-sibling::bar]

因此,您的模式可以简单到:

/Header/ElementA[ElementB[ElementC][2]]

它将查找具有两个或多个ElementB子元素的ElementA元素,每个元素都有一个ElementC子元素。

非常好。一个诡辩:您可能不需要ElementC[2]上的谓词,因为他没有指定存在多个ElementC,即使他的示例显示了多个。+1最佳答案。如果至少有两个,那么还有第二个。所有这些都不会将邻近性考虑在内。如果您想将选择限制为仅包含两个子项的foo,请使用//foo[countbar=2]。非常好。一个诡辩:您可能不需要ElementC[2]上的谓词,因为他没有指定存在多个ElementC,即使他的示例显示了多个。+1最佳答案。如果至少有两个,那么还有第二个。所有这些都不会将邻近性考虑在内。如果您想将选择限制为仅包含两个子项的foo,请使用//foo[countbar=2].@约翰·桑德斯:你可能会表现出一些尊重并选择最好的答案,我认为这显然是@Robert Rossney的答案。@约翰·桑德斯:你可能会表现出一些尊重并选择最好的答案,我认为这显然是@Robert Rossney的答案。@约翰·桑德斯:你可能会表现出一些尊重并选择我认为最好的答案我想这显然是罗伯特·罗斯尼写的。@Dimitre:如果我在理解了答案后接受了答案,那就表示了我最大的尊重。我很接近,我没有忘记。@John Saunders:你可能会表现出一些尊重,并选择最好的答案,我认为这显然是@Robert Rossney的答案。@Dimitre:如果我在理解了答案后接受了答案,那将显示出最大的尊重。我很接近,我没有忘记。