我正在浏览lxml tutorial,我有一个问题:
以下是代码:
>>> html = etree.Element("html")
>>> body = etree.SubElement(html, "body")
>>> body.text = "TEXT"
>>> etree.tostring(html)
b'<html><body>TEXT</body></html>'
#############LOOK!!!!!!!############
>>> br = etree.SubElement(body, "br")
>>> etree.tostring(html)
b'<html><body>TEXT<br/></body></html>'
#############END####################
>>> br.tail = "TAIL"
>>> etree.tostring(html)
b'<html><body>TEXT<br/>TAIL</body></html>'
正如您所看到的,在包装块中,指令br = etree.SubElement(body, "br")
只会创建<br />
标记,为什么会这样?
br
是保留字吗?
答案 0 :(得分:0)
感谢某人的亲切通知,我应该在这里公布我的答案:
首先看一下这段代码:
from lxml import etree
if __name__ == '__main__':
print """Trying to create xml file like this:
<html><body>Hello<br/>World</body></html>"""
html_node = etree.Element("html")
body_node = etree.SubElement(html_node, "body")
body_node.text = "Hello"
print "Step1:" + etree.tostring(html_node)
br_node = etree.SubElement(body_node, "br")
print "Step2:" + etree.tostring(html_node)
br_node.tail = "World"
print "Step3:" + etree.tostring(html_node)
br_node.text = "Yeah?"
print "Step4:" + etree.tostring(html_node)
这是输出:
Trying to create xml file like this:
<html><body>Hello<br/>World</body></html>
Step1:<html><body>Hello</body></html>
Step2:<html><body>Hello<br/></body></html>
Step3:<html><body>Hello<br/>World</body></html>
Step4:<html><body>Hello<br>Yeah?</br>World</body></html>
起初,我想弄清楚的是:
为什么br_node的输出是
而不是
您可以查看步骤3和步骤4,答案非常明确:
如果元素没有内容,则其输出格式为&lt;“name”/&gt;
由于现有的语义,这个简单的问题困扰了我很长时间。
希望这篇文章能帮助像我这样的人。