使用lxml和Python 3.7看似重复的xml子元素

时间:2019-02-27 22:11:07

标签: python python-3.x pycharm lxml

在测试用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编码的模块的特性,还是其他特性。

0 个答案:

没有答案