HtmlAgilityPack在OuterHtml中生成缺少的結束標記

c# html html-agility-pack

我正在使用HtmlAgilityPack來解析和操作html文本。然而,似乎DocumentNode.OuterHtml提供了缺少的結束標記。

為了隔離問題,我現在只做解析並獲取OuterHtml(無操作):

var document = new HtmlDocument();
document.LoadHtml(myHtml);
result = document.DocumentNode.OuterHtml;

原文:(myHtml)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="X-UA-Compatible" content="IE=Edge" /><title>
     MyTitle
</title>

OutputHtml :( result) 請注意,元素未關閉

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="X-UA-Compatible" content="IE=Edge"><title>
    MyTitle
</title>

類似地,所有輸入和img元素都是打開的。 (請不要回答它不應該是一個問題。它應該不是,但確實如此。)Chrome無法正確呈現頁面。繼續閱讀。

更奇怪的是:

原文:(myHtml)

    <option value="10">Afrikaans</option>
    <option value="11">Albanian</option>
    <option value="12">Arabic</option>
    <option value="13">Armenian</option>
    <option value="14">Azerbaijani</option>
    <option value="15">Basque</option>

OutputHtml :(結果) 請注意,缺少完整的顯式結束標記

    <option value="10">Afrikaans
    <option value="11">Albanian
    <option value="12">Arabic
    <option value="13">Armenian

使用HtmlAgilitPack最新的NuGet包:id =“HtmlAgilityPack”version =“1.4.9”

一般承認的答案

加載文檔時可以設置多個選項。

OptionAutoCloseOnEnd

定義是否必須在結束時或直接在文檔中完成非閉合節點的關閉。將此設置為true實際上可以更改瀏覽器呈現頁面的方式。

document = new HtmlDocument();
document.OptionAutoCloseOnEnd = true;
document.LoadHtml(content);

相關資料來源:

HtmlAgilityPack刪除選項結束標記

圖像標記未使用HTMLAgilityPack關閉



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