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,我想是的。在树的抽象定义中,它只是另一个节点(元素)。空元素的简写符号只是表示的一个方面。