从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"/>'