HTML替换段落和中断

时间:2013-12-10 00:49:22

标签: html parsing html-agility-pack

我正在使用HTMLAgilityPack来解析一些HTML。我想将所有<p>代码替换为\r,将所有<br>代码替换为\n。不确定如何做到这一点,这是我到目前为止所尝试的:

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

        var ptags = doc.DocumentNode.SelectNodes("//p");

        foreach (var ptag in ptags)
        {
            ptag.OuterHtml.Replace("<p>", "\r");
        }

        var brtags = doc.DocumentNode.SelectNodes("//br");

        foreach (var br in brtags)
        {
            br.OuterHtml.Replace("<br>", "\n");
        }

1 个答案:

答案 0 :(得分:0)

这个功能对我有用:

public string ReplaceParagraph(HtmlDocument doc)
{
    doc.DocumentNode.SelectNodes("p")
        .ToList()
        .ForEach(pNode => pNode.InnerHtml = HtmlNode.CreateNode(pNode.InnerText + "\r").InnerHtml);
    return doc.DocumentNode.SelectNodes("//text()")
        .Aggregate("", (current, node) => current + (" " + node.InnerText)).TrimStart();
}

作为单元测试你可以运行这样的东西:

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("<p>line 1</p><p>line 2</p>");
var plainText = ReplaceParagraph(doc);
Assert.IsTrue(plainText == "line 1\r line 2\r", "not equal to expected string");

可以使用相同的函数ReplaceParagrap用\ n。

替换
标签