为什么Python的lxml.etree.SubElement类方法不是实例方法?

时间:2014-08-09 21:06:07

标签: python lxml

为了向现有元素添加新的子元素,我必须调用一个类方法,并将父元素作为参数。我希望创建一个子元素作为即将成为父元素的实例方法,将子元素(来自Element构造函数)作为唯一的形式参数。

实际值:

#!/usr/bin/python
from lxml import etree
root = etree.Element("parent")
childNode = etree.SubElement(root, "child")

预期(想象):

#!/usr/bin/python
from lxml import etree
root = etree.Element("parent")
childNode = root.AddSubElement(etree.Element("child"))

这是lxml的设计者的决定,还是lxml设计的其他部分强加的约束,或者更多的Pythonic,"或者什么?

1 个答案:

答案 0 :(得分:3)

您可以这样做,但执行此操作的方法称为append,而不是AddSubElement

childNode = root.append(etree.Element("child"))

lxml tutorial说“这是如此常见,以至于有一种更短,更有效的方法:SubElement工厂”。但是,它使用SubElement的示例实际上比使用append的示例略长,并且它没有解释它是如何更有效的,所以我承认我为什么会这么说它感到难过。您可以使用您喜欢的任何语法。

似乎真正的更短的方法是允许您按元素名称追加而不是手动创建Element对象的方法(例如,root.addChild("child"))。我不知道为什么没有这样的方法,但我相信其他一些XML库都有类似的东西。