如何将HTML解码为字符串?

时间:2019-02-08 13:00:34

标签: c# html string

我需要将HTML解码为纯文本。我知道有很多这样的问题,但是我注意到这些解决方案存在一个问题,不知道如何解决。

例如,我们有一段HTML: <h1><strong>Some text</strong></h1><p><br></p><p>Some more text</p>

正则表达式解决方案,HttpUtility.HtmlDecode方法。所有这些都给出以下输出:Some textSome more text。单词在应该分开的地方连接在一起。有没有一种方法可以在不合并单词的情况下解码字符串?

4 个答案:

答案 0 :(得分:2)

简单的方法是使用HTML Agility Pack:

HtmlDocument htmlDocument= new HtmlDocument();
htmlDocument.Load(htmlString);
string res=htmlDocument.DocumentNode.SelectSingleNode("YOUR XPATH TO THE INTRESTING ELEMENT").InnerText

答案 1 :(得分:2)

目前尚不清楚在最初没有分离的事物之间要使用什么分隔符。所以我使用了NewLine \n
Where(x=>!string.IsNullOrWhiteSpace(x)将删除空元素,这将导致在更复杂的html文档中大量\n\n

var input = "<h1><strong>Some text</strong></h1><p><br></p><p>Some more text</p>";
var htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(input);

var result = string.Join(
                "\n", 
                htmlDocument
                    .DocumentNode
                    .ChildNodes
                    .Select(x=> x.InnerText)
                    .Where(x=>!string.IsNullOrWhiteSpace(x))
              );

结果:

  

“一些文字\ n一些其他文字”

答案 2 :(得分:0)

您可以使用以下方法。在此示例中,我使用了新行来分隔内部文本,希望您可以对此进行调整以适合您的情况。

public static string GetPlainTextFromHTML(string inputText)
    {
        // Extracted plain text
        var plainText = string.Empty;

        if(string.IsNullOrWhiteSpace(inputText))
        {
            return plainText;
        }

        var htmlNote = new HtmlDocument();
        htmlNote.LoadHtml(inputText);

        var nodes = htmlNote.DocumentNode.ChildNodes;
        if(nodes == null)
        {
            return plainText;
        }

        StringBuilder innerString = new StringBuilder();

        // Replace <p> with new lines
        foreach (HtmlNode node in nodes) 
        {
            innerString.Append(node.InnerText);
            innerString.Append("\\n");
        }

        plainText = innerString.ToString();
        return plainText;
    }

答案 3 :(得分:-1)

您可以使用正则表达式:<(div | / div | br | p | / p)[^>] {0,}>