在测试用lxml组装XML的方法时,我注意到了一些不寻常的地方:当通过etree.SubElement(parent,'name').text = 'foo'
方式添加带有文本的子元素时,XML树的更新几乎就像首先执行etree.SubElement(parent,'name')
一样,然后etree.SubElement(parent,'name').text = 'foo'
,从而创建一个带有额外空标签的xml树。
我第一次注意到它的情况:
PyDev console: starting.
Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit (AMD64)] on win32
from lxml import etree
root = etree.Element('entry')
method = etree.SubElement(root,'Job.get')
etree.SubElement(method,'id').text = '666'
etree.tostring(root,pretty_print=True)
b'<entry>\n <Job.get>\n <id/>\n <id>666</id>\n </Job.get>\n</entry>\n'
请注意,尽管<id/>
除了<id>666</id>
之外也仅输入一次该子元素。
我专门做的一项测试表明,在我输入的第7行上,它给出了以下内容:
etree.SubElement(test,'dupe').text = 'licate'
在敲入Enter之前,将SubElement
的第二个参数编辑为'dup'
-尽管有一个空标签etree.tostring()
,但您可以从<dupe>
的输出中看到就像我在编辑该命令之前和之后执行了该命令一样。
PyDev console: starting.
Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit (AMD64)] on win32
from lxml import etree
test = etree.Element('top')
etree.tostring(test)
b'<top/>'
etree.SubElement(test,'dup').text = 'licate'
etree.tostring(test)
b'<top><dupe/><dup>licate</dup></top>'
我不确定我是在看PyCharm,Python交互还是用C编码的模块的特性,还是其他特性。