gpt4 book ai didi

debugging - 用于模拟具有多个条件的子查询的 xpath 表达式

转载 作者:行者123 更新时间:2023-12-03 17:05:40 25 4
gpt4 key购买 nike

我必须使用 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>

我们想检索 <value><obj/data><code=X><obj> 内最小 <index> (在我们的例子中,结果是 DDD)。

我试过下面的表达式,但它似乎不起作用:

/root/obj[datalist/data/code='X'][not(preceding-sibling::obj/index <= index)
and not(following-sibling::obj/index <= index)]/datalist/data/value

但是没用

最佳答案

在盯着这个看了很长一段时间后,我想我已经弄明白是怎么回事了。简而言之,您在 obj 的初始匹配中强制执行 code='X',但不在同级轴中强制执行。

换句话说,你是说:“给我找一个 obj 节点,它 a) 没有具有较低 index 的兄弟节点,并且 b) 有后代 code='X'。没有节点满足这些条件。

当然,您的意思是只考虑有后代 code='X' 的 sibling ,而不是任何 sibling 。 p>

试试这个(可在 this XML Playground 运行)

root/obj[datalist/data/code='X'][
not(preceding-sibling::obj[
datalist/data/code='X'
]/index &lt; index)
and
not(following-sibling::obj[
datalist/data/code='X'
]/index &lt; index)
]/datalist/data/value

关于debugging - 用于模拟具有多个条件的子查询的 xpath 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11363408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com