gpt4 book ai didi

xml - 我的 XPATH 表达式无法正常工作

转载 作者:数据小太阳 更新时间:2023-10-29 02:24:37 27 4
gpt4 key购买 nike

我使用这个 xpath 表达式列出所有“非测试”项目:

/Items/Item[State!='TEST']/Name

通常输入的 XML 看起来像这样,一切正常:

<Items>
<Item>
<Name>Item1</Name>
<State>ACTIVE</State>
</Item>
<Item>
<Name>Item2</Name>
<State>TEST</State>
</Item>
</Items>

但是当 Item 缺少 State 元素时,xpath 表达式什么都不选择:

<Items>
<Item>
<Name>Item1</Name>
</Item>
<Item>
<Name>Item2</Name>
</Item>
</Items>

拜托,我应该如何更改我的 xpath 表达式,以便它在 State 元素不存在时也能正常工作?如果状态元素不存在,项目将被视为“非测试”项目。我无法更改 xml 结构。

最佳答案

使用以下表达式:

/Items/Item[not(State='TEST')]/Name

不同之处在于 State!='TEST' 选择那些具有任何 State 元素且其字符串值不等于 TEST 的项目,而 not(State='TEST') 选择所有不具有字符串值等于 TESTState 元素的项(无论 状态是否存在)。这是一个微妙但重要的区别。

来自 the spec :

If one object to be compared is a node-set and the other is a string, then the comparison will be true if and only if there is a node in the node-set such that the result of performing the comparison on the string-value of the node and the other string is true.

此外,想象以下输入:

<Items>
<Item>
<Name>Item1</Name>
<State>blah</State>
<State>TEST</State>
</Item>
<Item>
<Name>Item2</Name>
<State>TEST</State>
</Item>
</Items>

这个表达式:

/Items/Item[State!='TEST']/Name

...将选择第一个 ItemName 元素,因为它包含至少一个 State 元素没有 TEST 的值。

但是,这个表达式:

/Items/Item[not(State='TEST')]/Name

...不选择任何项目。第二种形式通常是您想要的。

请参阅此说明 from the spec :

NOTE: If $x is bound to a node-set, then $x="foo" does not mean the same as not($x!="foo"): the former is true if and only if some node in $x has the string-value foo; the latter is true if and only if all nodes in $x have the string-value foo.

关于xml - 我的 XPATH 表达式无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8792383/

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