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>
标记为“是”的课程。其他人被排除在外。
我该如何做到这一点?
答案 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>