【问题标题】:XPath "Not". Ignore branches with a specific tagXPath“不是”。忽略带有特定标签的分支
【发布时间】:2012-02-28 21:49:53
【问题描述】:

我已经将一个网页加载到 HTML Agility Pack 中并拥有一个 DOM。我想使用 XPATH 提取页面上的所有文本(但不是在 <script> 标签中找到的 javascript)。

我想我需要一个 //text() 和一个 'not' 来忽略分支中包含 <script> 的任何标签。

我试过了

doc.DocumentNode.SelectNodes("//text()[not(self::script)]"))

doc.DocumentNode.SelectNodes("//text()[not(script)]"))

但两者都不起作用。它们返回的节点的 XPath 属性示例是(注意脚本)

/html[1]/body[1]/div[2]/div[4]/div[1]/div[1]/div[1]/div[3]/script[1]/#text[1]

我已经咨询了这两个帖子。

Is it possible to do 'not' matching in XPath?

Grab all text from html with Html Agility Pack(这是一篇好文章,但它带出了 JS)

有什么建议吗?

【问题讨论】:

    标签: xpath html-agility-pack


    【解决方案1】:

    您的第一次尝试拒绝所有作为脚本元素的文本节点,而您的第二次尝试拒绝所有具有脚本节点子节点的文本节点。当然,在这两种情况下,条件都不会成立。

    您没有清楚地解释您的要求,但我想您想拒绝所有以脚本元素为父元素的文本节点,这将是

    //text()[not(parent::script)]
    

    //*[not(self::script)]/text()
    

    【讨论】:

    • 这行得通.... //*[not(self::script)]/text() (另一个因为某种原因没有)谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多