首先,ID
不同于id
. HTML 不区分大小写,但 XML 区分大小写。看看的作者Simon Mourier的回答。HtmlAgilityPack
也就是说,当你使用它的 XPATH 特性时,你必须使用小写的标签。这意味着“//body”表达式将匹配 BODY、Body 和 body,而“//BODY”将不匹配任何内容。
同样代表ID
.
关于过滤器逻辑,您必须使用Logical-and
运算符:
var nodes = doc.DocumentNode.SelectNodes(
"//*[contains(concat(' ', normalize-space(@class), ' '), ' abc ')"+
" and " +
"contains(concat(' ', normalize-space(@id), ' '), ' div1 ')]");
或者,更简单:
var nodes = doc.DocumentNode.SelectNodes("//*[@class=\"abc\" and @id=\"div1\"]");
但作为个人喜好,如果上下文允许,我LINQ
会这样做:
var nodes = doc.DocumentNode.Descendants()
.Where(i =>
i.Attributes["class"] != null
&& i.Id != null
&& i.Attributes["class"].Value == "abc"
&& i.Id == "div1");