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合法吗? 是的,了解原因