python-如何在从lxml.ElementBase继承的对象中自定义名称空间前缀

从lxml文档中,我了解到自定义XML元素应继承自ElementBase.

例如,我可以创建

class FactVariable(etree.ElementBase):
    ''' Class that represents a XBRL fact variable.'''
    TAG = '{http://xbrl.org/2008/variable}factVariable'

    @property
    def label(self):
        return self.attrib['{http://www.w3.org/1999/xlink}label']

    @label.setter
    def label(self, value):
        self.attrib['{http://www.w3.org/1999/xlink}label'] = value

我的问题是,当我创建XML树并放置此类节点时,

<ns0:factVariable xmlns:ns0="http://xbrl.org/2008/variable" label="azerty"/> 

问题:我希望名称空间以va前缀,而不是ns0怎么更改?

我试图设置self.nsmap属性,但是有一个“只读”异常.
添加键/值无效(如文档中所述).

我也尝试过,没有成功

etree.register_namespace('va', 'http://xbrl.org/2008/variable')

解决方法:

我知道这很旧,也许@rds解决了这个问题,但是我遇到了类似的问题,因此以为我会分享som信息.
似乎在创建时设置nsmap至少可以起作用:

>>> etree.tostring(FactVariable(label='qwerty', nsmap={'va':'http://xbrl.org/2008/variable'}))
'<va:factVariable xmlns:va="http://xbrl.org/2008/variable" label="qwerty"/>'
上一篇:Python BeautifulSoup错误


下一篇:Bug or Feature?藏在 requests_html 中的陷阱