使用Nokogiri解析HTML(不遵循HTML语义)
我有一个包含以下数据的HTML文档:使用Nokogiri解析HTML(不遵循HTML语义),html,ruby,xml,parsing,nokogiri,Html,Ruby,Xml,Parsing,Nokogiri,我有一个包含以下数据的HTML文档: <div> <p class="someclass"> <ul> <li>Item 1</li> <li>Item 2</li> </ul> </p> </div> 当我检查数据库时,我只得到外部的标记: <p class="somecl
<div>
<p class="someclass">
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
</p>
</div>
当我检查数据库时,我只得到外部的
标记:
<p class="someclass">
</p>
没有存储或检索内部标签内容
我知道
标签不能包含
标签,但是我们从客户那里得到的文档有数据,大约有1000个文档有数据,因此我无法手动编辑它们尝试使用Nokogiri::XML
解析器而不是Nokogiri::HTML
解析器。它不应该关心标记语义,但我不确定它将如何处理HTML5中那些无效XML的部分。我最终使用Nokogiri::XML
解析器解析HTML
文档
我不得不在很多地方修改剧本
解析代码
@xml_doc = Nokogiri::XML.parse(file) { |cfg| cfg.noblanks }
@xml_doc.remove_namespaces!
已完成的更改
@xml_doc = Nokogiri::XML.parse(file) { |cfg| cfg.noblanks }
@xml_doc.remove_namespaces!
- 将
方法更改为属性
attr
- 这里不需要使用
方法链接text
attr
- 但是需要检查一下无效的HTML5标记
- 需要对解析逻辑进行更多的更改
在这里很有魅力,所以我可以在db中存储完整的htmlnode.to_html
errors
中修复并标记它。无效的HTML5标记在XML中并不重要,除非它们在语法上有错误,在这种情况下,它们也会被修复并标记。XML不像HTML那样赋予标记特殊的含义,因此它应该只关心标记是否正确嵌套和关闭。