2014-03-12 110 views
1

我有一些文本(不是HTML文件),其中有換言之之間只是a標籤,像這樣(本例中有兩個a節點):獲取所有的HTML節點文本

<a rel="nofollow" target="_blank" href="http://loremipsum.net/">http://loremipsum.net/</a> 
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, <a rel="nofollow" target="_blank" href="http://loremipsum.net/">http://loremipsum.net/</a> sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. 

我想更換所有這些標籤的文字爲"link"node在這個編碼:

var node = HtmlNode.CreateNode(text); 
var links = node.SelectNodes("//a[@href]"); 

只是指的第一個鏈接,但我希望所有的文字鏈接。我怎樣才能找到他們?謝謝。

+0

喜@paqogomez,正如我所說,節點,只需返回第一個鏈接。在他的回答中,他假設它是一個html文檔,但它是一個文本,所以結果不是我所需要的。這個問題是下一步:) – user3293835

回答

2

選擇從文檔中的所有鏈接,然後替換他們的內部HTML:

HtmlDocument doc = new HtmlDocument(); 
doc.LoadHtml(text); 

foreach (var link in doc.DocumentNode.SelectNodes("//a")) 
    link.InnerHtml = "link"; 

string result = doc.DocumentNode.OuterHtml; 

結果是

<a rel="nofollow" target="_blank" href="http://loremipsum.net/">link</a> 
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, <a rel="nofollow" 
target="_blank" href="http://loremipsum.net/">link</a> sed diam nonummy nibh 
euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. 
+1

非常感謝謝爾蓋。你救了我的屁股! (如果它沒有任何鏈接,它將拋出空的異常,但沒有問題) – user3293835

+1

@ user3293835你是對的 - 我忘了HtmlAgilityPack返回null而不是空節點集合。只需將選定的節點保存到「鏈接」之類的局部變量中,並在枚舉之前驗證其是否爲空 –