XPATH返回没有子标记和特定值的子标记

时间:2015-04-09 19:02:19

标签: xml xpath

XPATH新手,我有以下xml:

<lessons>
    <lesson>blah</lesson>
    <lesson>blah</lesson>
    <lesson>blah</lesson>
    <lesson>
        <A>Yes</A>
    </lesson>
    <lesson>
        <A>No</A>
    </lesson>
    <lesson>
        <A>Booyah</A>
    </lesson>
    <lesson>
        <A>Wowzer</A>
    </lesson>
</lessons>

我想要的是选择没有<A>标记的课程,只有<A>标记为“是”的课程。其他人被排除在外。

我该如何做到这一点?

1 个答案:

答案 0 :(得分:2)

如果您的要求描述为“全部退回X,但排除所有有Y”,那么您几乎总是需要一个谓词

只需使用以下XPath表达式:

/lessons/lesson[not(A = 'No')]

假设输入文档格式正确(您的输入文档不是,因为其中一个lesson元素没有正确关闭),结果将是(个别结果由--------分隔):

<lesson>blah</lesson>
-----------------------
<lesson>blah</lesson>
-----------------------
<lesson>blah</lesson>
-----------------------
<lesson>
<A>Yes</A>
</lesson>
-----------------------
<lesson>
<A>Booyah</A>
</lesson>
-----------------------
<lesson>
<A>Wowzer</A>
</lesson>

  

因为我特别想要,并且排除任何其他可能是否为No或任何其他值

然后使用

/lessons/lesson[A = 'Yes']

结果将是(显然):

<lesson>
  <A>Yes</A>
</lesson>

如果您还想选择lesson元素,如果它们根本没有A子元素,请使用

/lessons/lesson[A = 'Yes' or not(A)]

,结果将是

<lesson>blah</lesson>
-----------------------
<lesson>blah</lesson>
-----------------------
<lesson>blah</lesson>
-----------------------
<lesson>
<A>Yes</A>
</lesson>