考虑以下代码片段:
import lxml.html
html = '<div><br />Hello text</div>'
doc = lxml.html.fromstring(html)
text = doc.xpath('//text()')[0]
print lxml.html.tostring(text.getparent())
#prints <br>Hello text我期望看到'<div><br />Hello text</div>',因为br不能有嵌套文本,并且是“自封闭的”(我指的是/>)。如何让lxml正确处理它?
发布于 2009-10-16 12:55:35
HTML没有自动关闭标签。这是一件xml的事情。
import lxml.etree
html = '<div><br />Hello text</div>'
doc = lxml.etree.fromstring(html)
text = doc.xpath('//text()')[0]
print lxml.etree.tostring(text.getparent())打印
<br/>Hello text请注意,文本不在标记内。lxml有一个"tail“的概念。
>>> print text.text
None
>>> print text.tail
Hello text发布于 2009-10-16 12:59:21
在处理有效的XHTML时,可以使用etree而不是html。
import lxml.etree
html = '<div><br />Hello text</div>'
doc = lxml.etree.fromstring(html)
text = doc.xpath('//text()')[0]
print lxml.etree.tostring(text.getparent())有趣的是,您通常可以使用以下代码将HTML转换为XHTML:
import lxml.etree
import lxml.html
html = '<div><br>Hello text</div>'
doc = lxml.html.fromstring(html)
text = doc.xpath('//text()')[0]
print lxml.etree.tostring(text.getparent())输出:"<br/>Hello text"
https://stackoverflow.com/questions/1577732
复制相似问题