Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Nokogiri解析HTML(不遵循HTML语义)_Html_Ruby_Xml_Parsing_Nokogiri - Fatal编程技术网

使用Nokogiri解析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

我有一个包含以下数据的HTML文档:

<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标记
  • 需要对解析逻辑进行更多的更改
  • node.to_html
    在这里很有魅力,所以我可以在db中存储完整的html

@Pete再次要将p标签转换为div,我必须使用nokogiri,因为p标签节点内没有内容,转换后的div标签也没有内容。想法?确切地说,我将不得不改变数千行的整个脚本:(如果我试图将其解析为xmlInvalid HTML,则会在
errors
中修复并标记它。无效的HTML5标记在XML中并不重要,除非它们在语法上有错误,在这种情况下,它们也会被修复并标记。XML不像HTML那样赋予标记特殊的含义,因此它应该只关心标记是否正确嵌套和关闭。