2014-10-19 37 views
-1

我经历了lxml tutorial,我有一个问题:为什么lxml.etree.SubElement(body,“br”)将创建<br />?

下面是代码:

>>> 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

你是什么意思的保留字? Python中有很少[保留字](http://stackoverflow.com/q/22864221/190597),而'br'不是其中之一。 – unutbu 2014-10-19 10:17:51

+0

我不能告诉你在这里问什么。这种行为与你所期待的有何不同? – 2014-10-19 10:21:26

+1

'
'是[空格符号](http://www.w3.org/TR/xhtml1/#h-4.6)空元素'

'。由于'SubElement()'不会创建*标签*,而是*元素*,所以您会得到一个完整的元素。 – 2014-10-19 10:37:08

回答

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,答案是很清楚的:

如果元素没有内容,它是输出格式将为<“name”/>

由于
的现有语义,此ea sy问题困扰了我很长一段时间。

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