【问题标题】:How to do the following XPath query?如何进行以下 XPath 查询?
【发布时间】:2013-10-22 06:00:39
【问题描述】:

基本上我正在使用以下 XML:

<div>
    <div>
    <b>E-mail:</b>
    <span>TheValue</span>
    </div>
    ... and more div tags
</div>

请记住,有许多不同的 div 标签 - 但只有一个包含带有“电子邮件:”内部文本的标签。

我要解析的是 span 标签的值,其中粗体标签等于“E-mail:”。

我知道我可以做类似("//div//div[contains(@text(), 'E-mail:')].innerText;

但我想通过检查粗体标签是否包含电子邮件而不仅仅是整个 div 标签的 innerText 来做到这一点。

【问题讨论】:

    标签: xml xpath xml-parsing html-parsing html-agility-pack


    【解决方案1】:
    //div/div[b = 'E-mail:']/span/text()
    

    不过最后一个text() 是可选的

    //div/div[b = 'E-mail:']/span
    

    也可以。前者为您提供文本节点,后者为您提供&lt;span&gt; 元素。

    如果它们没有被包裹在 &lt;div&gt; 中,而是只是相互跟随:

    //b[. = 'E-mail:']/following-sibling::span[1]
    

    请注意,.innerText 是非标准的。您应该在现代浏览器中使用.textContent

    【讨论】:

    • 我明白了。但是 //div/div/[b = 'E-mail:']/span 不应该是 //div/div[b = 'E-mail:']/span 吗?至少这对我有用。然后我再次在 C# 中使用 HtmlAgilityPack。
    • 该死。当然应该。错字。 — HTML Agility Pack 在其 API 中包含 .innerText,那么您可以使用它。
    • 我明白了 - 非常感谢您的帮助 :) 我是 XPath 的新手,所以像这样的答案很棒!
    猜你喜欢
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多