2014-03-12 57 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而不是空节点集合。只需将选定的节点保存到“链接”之类的局部变量中,并在枚举之前验证其是否为空 –