为什么lxml.etree.SubElement(body,&#34; br&#34;)会创建<br/>?

时间:2014-10-19 10:02:56

标签: python xml-parsing lxml

我正在浏览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是保留字吗?

1 个答案:

答案 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;

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

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