【问题标题】:Letting Nokogiri decide whether to use #fragment or #parse让 Nokogiri 决定是使用#fragment 还是#parse
【发布时间】:2012-04-26 07:11:54
【问题描述】:

我有一段 HTML 想用 Nokogiri 解析,但我不知道它是一个完整的 HTML 文档(带有 DOCTYPE 等)还是一个片段(例如,只是一个包含一些元素的 div) .

这对 Nokogiri 产生了影响,因为它应该使用 #fragment 来解析片段,而使用 #parse 来解析完整文档。

有没有办法确定给定的一段文本是片段还是完整的 HTML 文档?

丹尼斯

【问题讨论】:

  • 在这两种情况下都有充分的理由使用 parse。它只会使用您的 html 构建一个文档,您将能够更轻松地使用 xpath。

标签: ruby xml nokogiri


【解决方案1】:

取决于您的页面被丢弃的程度,但是

/^(?:\s*<!DOCTYPE)|(?:\s*<html)/

在大多数情况下应该可以工作。

【讨论】:

    【解决方案2】:

    最简单的方法是查找强制的&lt;html&gt; 标签,例如使用正则表达式/&lt;html[\s&gt;])/(允许属性)。

    这足以解决您的问题吗?

    【讨论】:

    • 请注意,&lt;html&gt; 标签在 HTML5 中不是必需的。例如,请参阅mathiasbynens.be/notes/minimal-html&lt;title&gt;&lt;body&gt; 标签可能更合适。
    • 根据引用的文章,title标签也不需要,body也不需要。
    • 不,但不需要&lt;title&gt;标签的情况极不可能,而且&lt;body&gt;标签只有在没有正文内容时才可能被省略(另一种不太可能的情况)。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 2016-05-13
    • 2015-10-08
    • 2019-04-05
    • 2012-01-19
    • 1970-01-01
    相关资源
    最近更新 更多