Xpath 计算1'的数量;在包含两组1';以0';s

Xpath 计算1'的数量;在包含两组1';以0';s,xpath,Xpath,我有两组1,中间有一些0。在第一组1之前是任意数量的0,在第二组1之后是任意数量的0。下面是一个示例实例。我需要一个XPath 2.0表达式,它返回第一个集合中1的数目。我需要一个XPath 2.0表达式,它返回第二组1中的1个数。对于下面的示例实例,第一个XPath表达式应返回2,第二个XPath表达式应返回3 <Cells> <cell> <value>0</value> </cell> &l

我有两组1,中间有一些0。在第一组1之前是任意数量的0,在第二组1之后是任意数量的0。下面是一个示例实例。我需要一个XPath 2.0表达式,它返回第一个集合中1的数目。我需要一个XPath 2.0表达式,它返回第二组1中的1个数。对于下面的示例实例,第一个XPath表达式应返回2,第二个XPath表达式应返回3

<Cells>
    <cell>
        <value>0</value>
    </cell>
    <cell>
        <value>1</value>
    </cell>
    <cell>
        <value>1</value>
    </cell>
    <cell>
        <value>0</value>
    </cell>
    <cell>
        <value>1</value>
    </cell>
    <cell>
        <value>1</value>
    </cell>
    <cell>
        <value>1</value>
    </cell>
    <cell>
        <value>0</value>
    </cell>
</Cells>

0
1.
1.
0
1.
1.
1.
0

这看起来有点复杂,但我认为它可能会奏效。这里的关键是:

对于第一个表达式,请尝试:

 count(((//cell[value=1][following-sibling::cell[1][value=0] ][1]/(self::cell,preceding-sibling::cell[value=1])))

 intersect

(//cell[value=1][preceding-sibling::cell[1][value=0] ][1]/(self::cell,following-sibling::cell[value=1])))
并输出
2

第二个表达式只查找第二个组(注意,
[1]
更改为
[2]
):

它输出我们
3

基本上,每个表达式都会查找具有
1
的单元格组,这些单元格组要么跟随具有
0
的单元格,要么跟随一个这样的单元格,然后查找这些单元格的交点-即跟随和跟随
0
值单元格的单元格。有两组这样的单元格,
count()
方法为每组单元格计数。最后,通过在适当的位置使用位置谓词
[1]
[2]
来选择目标组

  count(((//cell[value=1][following-sibling::cell[1][value=0] ][2]/(self::cell,preceding-sibling::cell[value=1])))

     intersect

    (//cell[value=1][preceding-sibling::cell[1][value=0] ][2]/(self::cell,following-sibling::cell[value=1])))