2014-09-23 39 views
0

我在C#中使用這個命令:HtmlAgilityPack中的可變標籤?

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

的問題是,我需要一個包含所有rX節點:

discussion r0 
discussion r1 
discussion r2 

我如何可以選擇所有rX節點? 如何在一個foreach中只選擇r0r1

回答

0

HtmlNode.SelectNodes()僅支持沒有正則表達式匹配功能的XPath 1.0。使用簡單的XPath starts-with()或功能應該做的伎倆:

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

非常感謝你,這個工程 2 Precisation: - 是否有一些性能的。 「開始 - 與」和「包含」之間的區別? - 如何只選擇r1和r2節點而不是r3? – hellomoto 2014-09-24 01:51:46

+0

1.我認爲這兩個函數之間沒有明顯的性能差異。 XPath'或'運算符,但是如果您想要匹配r1到r11等範圍,但不是r12或更高,我建議使用HAP的LINQ API而不是使用XPath。 – har07 2014-09-24 02:13:11

0

您可以嘗試使用正則表達式(使用matches功能)來配合rX

  • //tr[matches(@class,'discussion r.')]如果只有一個r
  • //tr[matches(@class,'discussion r.+')]後字符時,至少有一個
  • //tr[matches(@class,'discussion r\d+')]如果需要後面跟一個數字
+0

我想你的3個解決方案,但沒有工作:( – hellomoto 2014-09-23 19:34:10