Ica*_*aro 2 debugging xpath predicate subquery xpath-1.0
我必须使用 xpath 1.0 在两个不同的节点上使用两个标准在 xml 中找到一个值
我试着用一个例子来解释:如果我们有以下xml
<root>
<obj>
<index>5</index>
<datalist>
<data>
<code>X</code>
<value>AAA</value>
</data>
<data>
<code>Y</code>
<value>BBB</value>
</data>
</datalist>
</obj>
<obj>
<index>3</index>
<datalist>
<data>
<code>Z</code>
<value>CCC</value>
</data>
</datalist>
</obj>
<obj>
<index>4</index>
<datalist>
<data>
<code>X</code>
<value>DDD</value>
</data>
</datalist>
</obj>
<obj>
<index>2</index>
<datalist>
<data>
<code>Y</code>
<value>EEE</value>
</data>
</datalist>
</obj>
Run Code Online (Sandbox Code Playgroud)
我们想<value>在<obj/data>with<code=X>内检索<obj>with 的最小值<index>(在我们的示例中,我们将得到 DDD 作为结果)。
我尝试了以下表达式,但它接缝不起作用:
/root/obj[datalist/data/code='X'][not(preceding-sibling::obj/index <= index)
and not(following-sibling::obj/index <= index)]/datalist/data/value
Run Code Online (Sandbox Code Playgroud)
但它不起作用
经过一段时间的凝视,我想我已经弄清楚发生了什么。简而言之,您code='X'在 的初始匹配中强制执行obj,但不在同级轴中执行。
换句话说,您是在说:“给我找一个obj节点,它 a) 没有具有更低 的兄弟姐妹index,并且 b) 有后代code='X'。没有节点符合这些条件。
当然,您打算只考虑也有后代的兄弟姐妹code='X',而不仅仅是任何兄弟姐妹。
试试这个(可以在这个 XML Playground运行)
root/obj[datalist/data/code='X'][
not(preceding-sibling::obj[
datalist/data/code='X'
]/index < index)
and
not(following-sibling::obj[
datalist/data/code='X'
]/index < index)
]/datalist/data/value
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1980 次 |
| 最近记录: |