在处理 HTML 文档时,有时需要根据多个属性来精确定位元素。例如,HTML 中有一个 a
标签,其 id
为 "pnnext",class
为 "pn",我们希望使用 XPath 来选择这个特定的 a
标签。
【问题描述】
当仅需选择单个属性时,可以使用如下 XPath 表达式:
//a[@id='pnnext']
或 //a[@class='pn']
但若想同时基于 id
和 class
属性来选择该元素,则遇到了困难。
【解决方案】
1. 初步尝试:
查阅相关资料后,尝试使用 //a[@id='pnnext' and class='pn']
的形式,但未能成功找到目标节点。
2. 正确做法:
修正后的 XPath 表达式为 //a[@id='pnnext' and @class='pn']
,注意每个属性前都需要添加 @
符号。使用此表达式,通过 C# 代码可以正确地选择到所需的 a
标签:
HtmlNode nextHtmlNode = rootHtmlNode.SelectSingleNode("//a[@id='pnnext' and @class='pn']");
【结论】
在 XPath 中,若需同时选择多个属性,应在每个属性前都加上 @
符号,如 //a[@id='pnnext' and @class='pn']
。这样可以确保精确匹配具有指定属性组合的 HTML 元素。