奇怪的 lxml 行为
考虑以下代码片段:
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
我期望看到 '
,因为 '
gt;Hello textbr
不能嵌套文本并且是“自封闭的”(我的意思是 />
)。如何让lxml
正确处理它?
Consider the following snippet:
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
I was expecting to see '<div><br />Hello text</div>'
, because br
can't have nested text and is "self-closed" (I mean />
). How to make lxml
handle it right?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
HTML 没有自闭合标签。这是一个xml的东西。
请
注意,文本不在标签内。
lxml
有一个“tail
”概念。HTML doesn't have self-closing tags. It is a xml thing.
prints
Note that the text is not inside the tag.
lxml
has a "tail
" concept.当您处理有效的 XHTML 时,您可以使用 etree 而不是 html。
有趣的是,您通常可以使用它将 HTML 转换为 XHTML:
输出:
"
gt;Hello text"
When you are dealing with valid XHTML you can use the etree instead of html.
Fun thing, you can typically use this to convert HTML to XHTML:
Output:
"<br/>Hello text"