我对lxml有一个小问题。我正在将XML文档转换为HTML文档。 原始XML看起来像这样(它看起来像HTML,但它在XML文档中):
<p>Localization - Eiffel tower? Paris or Vegas <p>Bayes theorem p(A|B)</p></p>
当我这样做时(项目是上面的字符串)
lxml.html.tostring(lxml.html.fromstring(item))
我明白了:
<div><p>Localization - Eiffel tower? Paris or Vegas </p><p>Bayes theorem p(A|B)</p></div>
我对&lt; div&gt; s没有任何问题,但是'贝叶斯定理'段落不再嵌套在外段中是一个问题。
任何人都知道为什么lxml会这样做以及如何阻止它?感谢。
答案 0 :(得分:12)
lxml这样做是因为它不会在HTML中存储无效的HTML和<p>
元素can't be nested:
P元素代表一个段落。它不能包含块级元素(包括P本身)。
答案 1 :(得分:1)
您使用的是lxml的HTML解析器,而不是XML解析器。试试这个:
>>> from lxml import etree
>>> item = '<p>Eiffel tower? Paris or Vegas <p>Bayes theorem p(A|B)</p></p>'
>>> root = etree.fromstring(item)
>>> etree.tostring(root, pretty_print=True)
'<p>Eiffel tower? Paris or Vegas <p>Bayes theorem p(A|B)</p></p>\n'