C# HtmlAlityPack中的可变标签?
我在C中使用此命令:C# HtmlAlityPack中的可变标签?,c#,html,parsing,html-agility-pack,C#,Html,Parsing,Html Agility Pack,我在C中使用此命令: foreach (HtmlNode node in htmlDoc.DocumentNode.SelectNodes("//tr[@class='discussion r1']")) 问题是我需要所有包含rX的节点: 如何选择所有接收节点? 如何在一个foreach中仅选择r0和r1?您可以尝试使用正则表达式使用matches函数来匹配rX //tr[matches@class,'discussion r.]如果r后面只有一个字符 //tr[matches@c
foreach (HtmlNode node in
htmlDoc.DocumentNode.SelectNodes("//tr[@class='discussion r1']"))
问题是我需要所有包含rX的节点:
如何选择所有接收节点?
如何在一个foreach中仅选择r0和r1?您可以尝试使用正则表达式使用matches函数来匹配rX //tr[matches@class,'discussion r.]如果r后面只有一个字符 //tr[matches@class,“讨论r.+”]当至少有一个 //tr[matches@class,“discussion r\d+”]如果需要后跟数字 HtmlNode.SelectNodes只支持XPath 1.0,它没有正则表达式匹配函数。使用以或包含函数开头的简单XPath应该可以做到以下几点:
//using starts-with()
htmlDoc.DocumentNode
.SelectNodes("//tr[starts-with(@class,'discussion r')]")
//or using contains()
htmlDoc.DocumentNode
.SelectNodes("//tr[contains(@class,'discussion r')]")
非常感谢,这很有效。2精度:-开始与包含之间是否存在性能差异?-如何仅选择r1和r2节点而不选择r3?1。我认为这两个功能之间没有明显的性能差异。2.您可以使用XPath或运算符,但如果您想匹配r1到r11这样的范围,而不是r12及以上的范围,我建议使用HAP的LINQAPI,而不是使用XPath。
//using starts-with()
htmlDoc.DocumentNode
.SelectNodes("//tr[starts-with(@class,'discussion r')]")
//or using contains()
htmlDoc.DocumentNode
.SelectNodes("//tr[contains(@class,'discussion r')]")