是否可以向ObjectifiedElement实例添加任意数据?

时间:2011-12-17 00:25:29

标签: python lxml

我已经设置了自定义namespace lookup dictionary,以便将XML文件中的元素映射到ObjectifiedElement的子类。现在,我想向这些类的实例添加一些数据。但是由于ObjectifiedElement的工作方式,添加属性会导致元素被添加到元素树中,这不是我想要的。更重要的是,这不适用于所有Python类型;例如,无法创建list类型的属性。

这似乎可以通过继承ElementBase来实现,但这意味着会失去ObjectifiedElement提供的功能。你可以说我只需要ObjectifiedElement读取部分。我想我可以在我的子类中添加__getattr__来模拟这个,但我希望还有另一种方法。

1 个答案:

答案 0 :(得分:0)

我最终让__getattr__()转发给了etree的find()

class SomewhatObjectifiedElement(etree.ElementBase):
    nsmap = {'ns': 'http://www.my.org/namespace'}

    def __getattr__(self, name):
        return self.find('ns:' + name, self.nsmap)

这只会返回第一个元素,如果有多个匹配,不像ObjectifiedElement的行为,但它足以满足我的应用程序(大多数情况下它只能是一个匹配,否则,我使用{{1} })。