XPath如何获取包含子节点在内的多个筛选器的父节点的计数



以下是示例XML:

<Pnode PFilter="1">
<Child1>
<Child2 Filter="1"></Child2>
<Child2></Child2>
</Child1>
<Child1>
<Child2 ></Child2>
<Child2></Child2>
</Child1>
<Child1>
<Child2 Filter="1"></Child2>
<Child2></Child2>
</Child1>
</Pnode>
<Pnode>
<Child1>
<Child2 Filter="1"></Child2>
<Child2></Child2>
</Child1>
<Child1>
<Child2 ></Child2>
<Child2></Child2>
</Child1>
<Child1>
<Child2 Filter="1"></Child2>
<Child2></Child2>
</Child1>
</Pnode>
<Pnode>
<Child1>
<Child2 Filter="1"></Child2>
<Child2></Child2>
</Child1>
<Child1>
<Child2 ></Child2>
<Child2></Child2>
</Child1>
<Child1>
<Child2 Filter="1"></Child2>
<Child2></Child2>
</Child1>
</Pnode>
<Pnode>
<Child1>
<Child2></Child2>
<Child2></Child2>
</Child1>
<Child1>
<Child2 ></Child2>
<Child2></Child2>
</Child1>
<Child1>
<Child2></Child2>
<Child2></Child2>
</Child1>
</Pnode>
</Doc1>

我正试图获得不具有PFilter="0"的所有PNode的计数;1〃;并且具有至少1个子2过滤器=1。

在上面的例子中,结果应该是2。

expession="count(//Doc1/Pnode[not (@PFilter='1') and (Child1/Child2[@Filter='1'])])"

看起来应该行得通。我是不是遗漏了一些语法?

我还想也许expession="count(//Doc1/Pnode[not (@PFilter='1') and (count(Child1/Child2[@Filter='1'])>1)])"

有没有一种方法可以用这些类型的过滤器来获得父项的计数?

下面应该可以工作。请尝试一下:

expression="count(//Pnode[not (@PFilter='1')][Child1/Child2[@Filter='1']])"

expression="count(//Doc1/Pnode[not (@PFilter='1')][Child1/Child2[@Filter='1']])"

最新更新