HtmlAgilityPack中的可变标签

本文关键字:标签 HtmlAgilityPack | 更新日期: 2023-09-27 18:24:16

我在C#中使用这个命令:

foreach (HtmlNode node in 
     htmlDoc.DocumentNode.SelectNodes("//tr[@class='discussion r1']"))

问题是我需要所有包含rX:的节点

 discussion r0
 discussion r1
 discussion r2

如何选择所有rX节点?如何在一个foreach中只选择r0r1

HtmlAgilityPack中的可变标签

HtmlNode.SelectNodes()只支持XPath 1.0,它不具有正则表达式匹配功能。使用简单的XPath starts-with()contains()函数应该可以完成以下操作:

//using starts-with()
htmlDoc.DocumentNode
       .SelectNodes("//tr[starts-with(@class,'discussion r')]")
//or using contains()
htmlDoc.DocumentNode
       .SelectNodes("//tr[contains(@class,'discussion r')]")

您可以尝试使用正则表达式(使用matches函数)来匹配rX

  • 如果r之后只有一个字符,则为//tr[matches(@class,'discussion r.')]
  • 至少有一个//tr[matches(@class,'discussion r.+')]
  • //tr[matches(@class,'discussion r'd+')](如果需要后跟数字)