请考虑以下代码段:
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
正确处理它?</ p>
答案 0 :(得分:8)
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
答案 1 :(得分:2)
当您处理有效的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"