0

我正在尝试使用以下代码过滤掉不包含给定状态代码的 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 的返回标记,但事实并非如此。

有人知道为什么吗?

干杯,

热兹平

4

1 回答 1

2

来自XPath 1.0 规范

运算符计算其|操作数的并集,它必须是节点集。

而你需要这些多重的交集//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
        )
    ]
于 2013-08-28T14:33:14.357 回答