如何使用HTML Agility Pack清理格式錯誤的HTML


我試圖替換這個神可怕的正則表達式集合,這些正則表達式目前用於清理格式不良的HTML塊,並偶然發現了用於C#的HTML Agility Pack。它看起來非常強大,但是,我找不到一個如何使用包的例子,在我看來,它將是包含在其中的所需功能。我確信我是個白痴,在文檔中找不到合適的方法。

讓我解釋一下......說我有以下html:

<p class="someclass">
    <font size="3">
        <font face="Times New Roman">
            this is some text
            <a href="somepage.html">Some link</a>
        </font>
    </font>
</p>

......我想看起來像:

<p class="someclass">
    <font size="3">
        <font face="Times New Roman">
            this is some text
            <a href="somepage.html">Some link</a>
        </font>
    </font>
</p>

當我使用HtmlNode.Remove()方法時,它會刪除節點及其所有子節點。有沒有辦法刪除保留孩子的節點?

謝謝 :)

一般承認的答案

在HtmlNode上,RemoveChild方法有這個重載:

public HtmlNode RemoveChild(HtmlNode oldChild, bool keepGrandChildren);

所以這就是你要做的:

public HtmlNode RemoveChild(HtmlNode oldChild, bool keepGrandChildren);

編輯:看起來像替換w / keepGrandChildren選項沒有按預期工作,所以這是一個替代實現:

public HtmlNode RemoveChild(HtmlNode oldChild, bool keepGrandChildren);

熱門答案

你可以嘗試使用AngleSharp https://github.com/AngleSharp/AngleSharp

var parser = new HtmlParser();
var document = parser.Parse(html);

using (var writer = new StringWriter())
{
    document.ToHtml(writer, new PrettyMarkupFormatter());
    return writer.ToString();
}




許可下: CC-BY-SA
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因