我正在尝试使用以下代码过滤掉不包含给定状态代码的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
答案 0 :(得分:2)
|
运算符计算其操作数的并集,它必须是节点集。
而您需要这些多个//return[not(...)]
您可以在多个and
条件下使用not()
作为谓词
//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
)
]