使用XPath选择没有祖先值的元素

时间:2016-04-18 20:08:29

标签: xml xpath

我正在尝试选择XML中某些元素,而这些元素的祖先没有特定的值。例如,让我们有这个XML:

<doc>
   <block platform="mobile">
      <xref>1</xref>
   </block>
   <block platform="desktop">
      <xref>2</xref>
   </block>
   <block>
      <xref>3</xref>
   </block>
</doc>

我需要一些东西来选择所有没有“移动”的外部参照作为他们自己的平台价值或他们的任何祖先。在上面的示例中,查询应该返回外部参照2和3,因为它们或它们的任何祖先都没有将平台设置为“mobile”(或者根本没有定义平台)。

我尝试了几个使用祖先的xpath查询组合,尝试连接外部参数的所有平台值,并使用not(contains())来过滤掉移动部分,但都没有运气。

提前致谢

1 个答案:

答案 0 :(得分:1)

您可以使用此XPath:

//xref[not(ancestor-or-self::*/@platform = 'mobile')]

如果可以的话,通常可以避免//。如果您的XML总是具有上述结构,则可以使用:

/doc/block/xref[not(ancestor-or-self::*/@platform = 'mobile')]

[]之间的部分在两者中都是相同的。