在 xpath 中使用 [not] 检索与给定值不匹配的内容 (PLSQL)
Posted
技术标签:
【中文标题】在 xpath 中使用 [not] 检索与给定值不匹配的内容 (PLSQL)【英文标题】:Using [not] in xpath to retrieve content that does not match given values (PLSQL) 【发布时间】:2013-08-28 14:01:24 【问题描述】:我正在尝试使用以下代码过滤掉不包含给定状态代码的 xml 返回标签:
l_xml_return := (xmltype(l_xml_response).extract('//return[not(issueStatusId=84388)]|
//return[not(issueStatusId=73630)]|
//return[not(issueStatusId=67539)]|
//return[not(issueStatusId=42527)]|
//return[not(issueStatusId=22702)]|
//return[not(issueStatusId=20643)]|
//return[not(issueStatusId=4368)]|
//return[not(issueStatusId=4363)]|
//return[not(issueStatusId=4364)]
').getclobval());
我的 xml 包含以下内容:
<results>
<return>
<issueStatusId>84388</issueStatusId>
<name>Test 1</name>
</return>
<return>
<issueStatusId>4364</issueStatusId>
<name>Test 2</name>
</return>
<return>
<issueStatusId>999999</issueStatusId>
<name>Test 3</name>
</return>
</results>
使用此 xml 代码和 xpath 语句,仅应返回问题状态为 999999 的返回标记,但事实并非如此。
有人知道这是为什么吗?
干杯,
Jezzipin
【问题讨论】:
【参考方案1】:来自XPath 1.0 specs
|
运算符计算其操作数的并集,它必须是节点集。
而你需要这些多个//return[not(...)]
的交集
您可以在多个not()
条件上使用and
作为谓词
//return[
not(issueStatusId=84388) and
not(issueStatusId=73630) and
not(issueStatusId=67539) and
not(issueStatusId=42527) and
not(issueStatusId=22702) and
not(issueStatusId=20643) and
not(issueStatusId=4368) and
not(issueStatusId=4363) and
not(issueStatusId=4364)]
或等效:
//return[
not(
issueStatusId=84388 or
issueStatusId=73630 or
issueStatusId=67539 or
issueStatusId=42527 or
issueStatusId=22702 or
issueStatusId=20643 or
issueStatusId=4368 or
issueStatusId=4363 or
issueStatusId=4364
)
]
【讨论】:
+1 最后一个.. :) 非常感谢。最后一个是我需要的。遗憾的是,关于 XPATH 的 W3CCHOOLS 信息有点缺乏,而且我并没有真正使用 XML,所以不确定是否有 or 运算符。以上是关于在 xpath 中使用 [not] 检索与给定值不匹配的内容 (PLSQL)的主要内容,如果未能解决你的问题,请参考以下文章