簡體   English   中英

如何將HTML解碼為字符串?

[英]How to decode HTML into string?

我需要將HTML解碼為純文本。 我知道有很多這樣的問題,但是我注意到這些解決方案存在一個問題,並且不知道如何解決。

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

嘗試過正則表達式解決方案,即HttpUtility.HtmlDecode方法。 所有這些都給出以下輸出: Some textSome more text 單詞在應該分開的地方連接在一起。 有沒有一種方法可以解碼字符串而不合並單詞?

簡單的方法是使用HTML Agility Pack:

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

目前尚不清楚在最初沒有分離的事物之間要使用什么分隔符。 因此,我使用了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有些文字”

您可以使用以下方法。 在此示例中,我使用了新行來分隔內部文本,希望您可以對此進行調整以適合您的情況。

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;
    }

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM