我有两组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)
这看起来有些令人费解,但我认为它可以解决问题。此处的密钥为using the intersect() method:
对于第一个表达式,请尝试:
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]
):
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])))
并且胜过3
。
基本上,每个表达式都查找具有value
的{{1}}的单元格组,这些单元格要么跟着1
的{{1}}单元格,要么后面跟着一个这样的单元格,然后寻找这些单元格的交集-即,既跟着又跟着value
值单元格的单元格。有两组此类单元格,0
方法为每个此类组计数它们。最后,在适当的位置使用位置谓词0
或count()
选择目标组。