首页 > 解决方案 > 选择孩子但排除特定的孩子

问题描述

我有这个 XML 结构:

<?version="1.0" encoding="ISO-8859-1" ?>
  <feed xmlns="http://www.w3.org/2005/Atom" >
    <companyinfo>
      <addresses>
        <address type="mailing" >
          <city>NEW YORK</city>
        </address>
        <address type="business" >
          <city>NEW YORK</city>
        </address>
        <node1>node1</node1>
        <node2>node2</node2>
        <node3>nod3</node3>
      </addresses>
    </companyinfo>
  </feed>

我想选择所有级,<companyinfo>但从结果中排除addresses。这意味着我的选择变成了所有<nodeX>.

在阅读并查看相关线程thisthis之后,我想出了以下内容:

//companyinfo[not(addresses)]# 不起作用

//companyinfo/*[not(addresses)]# 不起作用

我误解了它的not(expr)工作原理吗?

我实际上是在尝试选择companyinfo IF addresses节点不存在吗?

标签: xpath

解决方案


您的 xml 无效,但如果您修复它(和错字),这个表达式虽然令人费解,

//*[local-name()="companyinfo"]//*[local-name()="addresses"]//*[not(ancestor-or-self::*[local-name()="address"])]

应该输出

node1
node2
node3

推荐阅读