Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HtmlAlityPack中的可变标签?_C#_Html_Parsing_Html Agility Pack - Fatal编程技术网

C# HtmlAlityPack中的可变标签?

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

我在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')]")