【问题标题】:Is there an XmlReader equivalent for HTML in .Net?.Net 中是否有与 HTML 等效的 XmlReader?
【发布时间】:2011-09-21 02:23:36
【问题描述】:

我过去曾使用HtmlAgilityPack 在 .Net 中解析 HTML,但我不喜欢它仅使用 DOM 模型这一事实。

在大型文档和/或具有大量嵌套的文档上,可能会遇到堆栈溢出或内存不足异常。此外,通常基于 DOM 的解析模型比基于流的方法使用更多的内存,这通常是因为想要使用 HTML 的进程可能一次只需要几个元素可用。

有谁知道 .Net 的一个不错的 HTML 解析器,它允许您以类似于 XmlReader 类的方式解析 HTML?即以仅转发流的方式

【问题讨论】:

  • 除了您的问题是合法的事实之外,您是否有这样一个 Html 页面的真实示例,它会导致堆栈溢出或 Html Agility Pack 的内存不足异常?我很想看看它长什么样。
  • 明天将尝试为您挖掘一个示例。但是以后你会考虑在库中添加一个XmlReader 样式类吗?
  • 不要浪费太多时间,我只是好奇 :-) 我确实有一个 HtmlReader 库存,但它不是公开的。
  • @Simon 这会出现在库的未来版本中吗?我的 API 必须从各种其他格式中提取数据,目前 HTML 是我仍然坚持使用基于 DOM 的解析的唯一格式,因为 HtmlAgilityPack 不支持流解析 atm

标签: .net html parsing html-agility-pack xmlreader


【解决方案1】:

我通常为此使用 SgmlReader:https://github.com/MindTouch/SGMLReader

正如其他人所说,HTML 不遵循 XML 的格式良好的规则存在问题,因此它本质上难以解析,但 SgmlReader 通常做得很好。

【讨论】:

    【解决方案2】:

    问题在于 HTML 可能格式不正确。在您解析文档的大部分内容之前,您无法知道哪个标签缺少结束标签(或者哪些标签放置的顺序不正确)。

    如果您要解析的文档格式正确,为什么不使用XmlReader

    【讨论】:

    • 正是因为它们几乎肯定会出现格式错误:-(
    猜你喜欢
    • 1970-01-01
    • 2011-05-31
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多