【问题标题】:XPATH - get all inner nodes except a particular oneXPATH - 获取除特定节点之外的所有内部节点
【发布时间】:2015-10-29 08:01:26
【问题描述】:

这是我的 HTML

<book>
 <div id="name"></div>
 <span id="age"></span>
 <p id="contact_number"></p>
 ...
 ... 
 (more attributes)
</book>

我需要提取&lt;book&gt;&lt;/book&gt; 中的所有text() 除了pid="contact_number"

所以基本上我需要//book//text() 除了//book//p[@id="contact_number"]//text()

如何在单个 xpath 查询中做到这一点?

【问题讨论】:

  • 在您发布的示例中,您有一个空的&lt;p id="contact_number"&gt;&lt;/p&gt;,所以我看不出您要排除什么。除了 XPath 2.0 之外,您的口头描述可以直接写成 //book//text() except //book//p[@id="contact_number"]//text()
  • @MartinHonnen 哇,真是巧合:D

标签: xpath


【解决方案1】:

如果您可以以不同的方式提出要求,可能会有更好的方法。无论如何,要按照它提出的方式回答问题,您可以试试这个:

//book//text()[not(ancestor::p/@id='contact_number')]

或者也许只是使用parent::p 而不是ancestor::p

//book//text()[not(parent::p/@id='contact_number')]

如果需要过滤掉空文本节点,请在末尾添加[normalize-space()]

【讨论】:

  • 你就像一个 XPATH 大师......你有什么好的 XPATH 学习资源的建议吗?
【解决方案2】:

尝试以下方法:

//*[not(self::p[@id = 'contact_number'])]/text()[normalize-space()]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2021-05-18
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多