【问题标题】:HtmlAgilityPack produces missing closing tags in OuterHtmlHtmlAgilityPack 在 OuterHtml 中生成缺少的结束标签
【发布时间】:2020-04-17 10:43:18
【问题描述】:

我正在使用 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>

同样,所有 input 和 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"

【问题讨论】:

  • 再次感谢。是 document.OptionAutoCloseOnEnd = true 帮助。尴尬的是我拍了一个副本。无论如何,对我来说似乎仍然很奇怪:原始 html 是正确的,所以不应该有任何“自动”魔法来不破坏它。
  • 如果你想把它写成答案,我会接受它
  • 好的,谢谢,会写的。

标签: c# html html-agility-pack


【解决方案1】:

在加载文档时可以设置几个选项。

OptionAutoCloseOnEnd

定义是否必须在文档末尾或直接在文档中关闭非关闭节点。将此设置为 true 实际上可以改变浏览器呈现页面的方式。

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

值得一读的相关资料:

HtmlAgilityPack Drops Option End Tags

Image tag not closing with HTMLAgilityPack

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 2017-09-03
    • 2020-11-02
    • 1970-01-01
    相关资源
    最近更新 更多