解析 HTML 片段,将一些自定义标签列入白名单

Parse an HTML fragment whitelisting some custom tags

我正在尝试使用 Nokogiri 解析包含自定义 HTML 标签的 HTML 片段。

示例:

string = "<div>hello</div>\n<custom-tag></custom-tag>"

我尝试了多种加载方式,但 none 是最优的。

如果我使用Nokogiri::HTML:

doc = Nokogiri::HTML(string)

当我使用 to_html 时,它会添加一个 doctype 和一个包装内容的 html 标签。这是不受欢迎的。

如果我使用Nokogiri::XML:

doc = Nokogiri::XML(string)

我得到了Error at line 2: Extra content at the end of the document,因为在XML中必须有一个根标签来包装所有文档内容。如果我再次尝试保存此内容,输出为 <div>hello</div>(删除第一个标签后的每个标签)

我也试过了doc = Nokogiri::HTML.fragment:

doc = Nokogiri::HTML.fragment(string)

但它抱怨 custom-tag

如何让 Nokogiri 正确解析这个 HTML 片段?

doc = Nokogiri::HTML.fragment(string) 是要走的路,你可以忽略 doc.errors 抱怨标签无效。

给它无效 HTML,所以你不能指望它不报告错误,但 HTML 解析器往往是宽容的。

如果您确定其余部分格式正确,也可以使用 Nokogiri::XML.fragment。这不会给你关于未定义标签的错误。