通过 XPATH 选择 <a href> HTML 标记的文本部分

Posted

技术标签:

【中文标题】通过 XPATH 选择 <a href> HTML 标记的文本部分【英文标题】:Selecting the text portion of an <a href> HTML tag through XPATH 【发布时间】:2012-03-01 05:52:54 【问题描述】:

考虑以下几点:

<span>
    <li>
        <a href="javascript:__doPostBack('Send', 'ShowPackageDetails');"> Recall </a>
    </li>
</span>

我想通过文本值“Recall”获取该元素的 XPath。

我知道我也可以通过以下方式选择它:

//a[contains(@href, 'ShowPackageDetails')]

但页面上的其他元素在其 href 属性中也包含相同的字符串。在这种情况下,我更愿意根据实际文本而不是其属性进行选择,因为我知道它是独一无二的,我不必求助于索引。

我试过了

//a[contains(@value, 'Recall')]

以及text()='Recall' 的其他各种组合,但我根本没有得到任何结果。

【问题讨论】:

这是 html,不是 XML。考虑改用 jQuery。 他可能正在使用 HTMLAgility 包什么的。 【参考方案1】:

试试这个:

HTML

<span>
    <li>
        <a href="javascript:__doPostBack('Send', 'ShowPackageDetails');">Recall</a>
    </li>
</span>

XPath

//a[text()="Recall"]

这可能与文本是“召回”而不是“召回”有关。我删除了您标记中的空格。

【讨论】:

不错的收获!我在 XPath 中包含了空格,它显示得很好。但我认为在这种情况下,我将使用@lwburk 提​​供的解决方案。感谢您的帮助。【参考方案2】:

如果您尝试解析已生成的 Html 页面,就像您提供的示例中一样,您应该使用Html Agility Pack。这是一个 C# 解决方案(我可以在您的问题标签中看到。

 HtmlDocument doc = new HtmlDocument();
 doc.Load("yourFile.html");
 foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
 
    //Check the text and do what you want...
 

【讨论】:

感谢您向我展示 Html 敏捷包。将来,如果我们实施它,我会感谢您的建议。【参考方案3】:

@ 用于选择属性。请改用以下内容:

//a[contains(., 'Recall')]

【讨论】:

以上是关于通过 XPATH 选择 <a href> HTML 标记的文本部分的主要内容,如果未能解决你的问题,请参考以下文章

使用 xpath 选择锚点时,Href 属性为空

如何通过 XPath 选择最后一个 p 元素之前的所有元素?

XPath gramma

Python通过lxml库遍历xml通过xpath查询(标签,属性名称,属性值,标签对属性)

通过 XPath 仅选择叶 SPAN 元素

13_Python_解析库_Xpath的使用