HTML到RichTextBox作为带有超链接的明文

时间:2013-06-03 13:24:30

标签: c# regex silverlight html-agility-pack

阅读not using RegExes for stripping HTML这么多,我想知道如何获取一些链接到我的RichTextBox而不会得到我从一些报纸网站下载的内容中的所有混乱的html。

我拥有:来自报纸网站的HTML。

我想要的:文章作为RichTextBox中的纯文本。但是使用链接(即将<a href="foo">bar</a>替换为<Hyperlink NavigateUri="foo">bar</Hyperlink>)。

HtmlAgilityPack为我HtmlNode.InnerText(删除了所有HTML标记)和HtmlNode.InnerHtml(包含所有标记)。我可以使用articlenode.SelectNodes(".//a")获取链接的网址和文字,但我怎么知道在HtmlNode.InnerText的纯文本中将其插入哪里?

任何暗示都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

以下是如何做到这一点(使用示例控制台应用程序,但Silverlight的想法是相同的):

我们假设你有这个HTML:

<html>
<head></head>
<body>
Link 1: <a href="foo1">bar</a>
Link 2: <a href="foo2">bar2</a>
</body>
</html>

然后这段代码:

HtmlDocument doc = new HtmlDocument();
doc.Load(myFileHtm);

foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//a"))
{
    // replace the HREF element in the DOM at the exact same place
    // by a deep cloned one, with a different name
    HtmlNode newNode = node.ParentNode.ReplaceChild(node.CloneNode("Hyperlink", true), node);

    // modify some attributes
    newNode.SetAttributeValue("NavigateUri", newNode.GetAttributeValue("href", null));
    newNode.Attributes.Remove("href");
}
doc.Save(Console.Out);

将输出:

<html>
<head></head>
<body>
Link 1: <hyperlink navigateuri="foo1">bar</hyperlink>
Link 2: <hyperlink navigateuri="foo2">bar2</hyperlink>
</body>
</html>