Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
Python 使用html5lib将任何HTML解析为XML_Python_Xml_Html5lib - Fatal编程技术网

Python 使用html5lib将任何HTML解析为XML

Python 使用html5lib将任何HTML解析为XML,python,xml,html5lib,Python,Xml,Html5lib,我需要整理HTML页面并用Python将其转换为XML;如果需要,丢失一些“坏”部件 我使用了一段时间的标记,但它不理解新的“article”、“footer”标记,也不喜欢不在头部的“meta”;使生成的XML几乎无法处理 到目前为止,我喜欢html5lib的功能,但我的第五次测试(非常奇怪的测试)失败了;解析时 <div attr="val""> 这对于格式良好的xml来说不是一个好结果 当我作为treebuilder尝试html5lib+lxml时,我将其转换为 <

我需要整理HTML页面并用Python将其转换为XML;如果需要,丢失一些“坏”部件

我使用了一段时间的标记,但它不理解新的“article”、“footer”标记,也不喜欢不在头部的“meta”;使生成的XML几乎无法处理

到目前为止,我喜欢html5lib的功能,但我的第五次测试(非常奇怪的测试)失败了;解析时

<div attr="val"">

这对于格式良好的xml来说不是一个好结果

当我作为treebuilder尝试html5lib+lxml时,我将其转换为

<div attr="val" U00022="">

哪一个更好,但问题是lxml会“吃掉”
标记的结束标记/斜杠,使它们在输出XML时只剩下


您建议使用什么?

您可以使用
方法
将元素设置为自动关闭或不自动关闭,如下所示:

from lxml import etree

tree = etree.Element('div', attrib={'attr':'val', 'U00022':''})
etree.tostring(tree)
'<div U00022="" attr="val"/>'

# parse as self-closing tag
etree.tostring(tree, method='xml')
'<div U00022="" attr="val"/>'
# parse as normal HTML
etree.tostring(tree, method='html')
'<div U00022="" attr="val"></div>'
打印输出:

<html><head></head><body><div u00022="" attr="val"></div></body></html>


不知何故,method='html'没有帮助,但是method='xml'可以工作,谢谢。@alex29,这太奇怪了!无论如何,我很高兴它有帮助:-)
tree = html5lib.parse('<div attr="val" U00022="">', treebuilder='lxml', namespaceHTMLElements=False)
tree.write('yourfilename', method='html')
<html><head></head><body><div u00022="" attr="val"></div></body></html>