Python 为什么lxml.etree.SubElement(body,“br”将创建<;br/>;?

Python 为什么lxml.etree.SubElement(body,“br”将创建<;br/>;?,python,xml-parsing,lxml,Python,Xml Parsing,Lxml,我正在看电影,我有一个问题: 代码如下: >>> html = etree.Element("html") >>> body = etree.SubElement(html, "body") >>> body.text = "TEXT" >>> etree.tostring(html) b'<html><body>TEXT</body></html>' ###########

我正在看电影,我有一个问题:

代码如下:

>>> 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>'
html=etree.Element(“html”) >>>body=etree.SubElement(html,“body”) >>>body.text=“text” >>>etree.tostring(html) b‘文本’ #############看############ >>>br=etree.SubElement(主体,“br”) >>>etree.tostring(html) “文本
” #############结束#################### >>>br.tail=“tail” >>>etree.tostring(html) “文本
尾部” 如您所见,在包装块中,指令
br=etree.SubElement(body,“br”)
将只创建一个

标记,这是为什么

br
是保留字吗

感谢某人的善意通知,我应该在这里发布我的答案:

首先看一下这段代码:

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)
从lxml导入etree
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
打印“”,尝试创建如下xml文件:
你好
世界“” html\u node=etree.Element(“html”) body\u node=etree.SubElement(html\u node,“body”) body\u node.text=“你好” 打印“Step1:+etree.tostring(html_节点) br_node=etree.SubElement(body_node,“br”) 打印“Step2:+etree.tostring(html_节点) br_node.tail=“世界” 打印“Step3:+etree.tostring(html_节点) br\u node.text=“是吗?” 打印“Step4:+etree.tostring(html_节点)
以下是输出:

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>
尝试创建如下xml文件:
你好
世界 第一步:你好 第二步:你好
第三步:你好
世界 第四步:你好
是吗?
世界
起初,我想弄明白的是:

为什么br_节点的输出是
而不是

您可以查看步骤3和步骤4,答案非常清楚:

如果元素没有内容,则其输出格式为

由于
的现有语义,这个简单的问题让我困惑了很长时间


希望这篇文章能帮助像我这样的人。

你说的保留字是什么意思?Python中很少有,而且
br
不是其中之一。我不知道你在问什么。此行为与您期望的行为有何不同?

是空元素的默认行为。因为
SubElement()
不创建标记,而是创建元素,所以您可以得到一个完整的元素。@LukasGraf非常感谢您!我想这就是我的意思。你知道,我认为lxml应该平等地对待它的所有子元素。基于这个想法,我想知道为什么打印结果不应该是“

”,因为“body”的结果是“”。所以差异是由
tostring
函数完成的,而不是子元素1?@VELVETDETH,我想是的。在树的抽象定义中,它只是另一个节点(元素)。空元素的简写符号只是表示的一个方面。