从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')
答案 0 :(得分:3)
我知道这是旧的,可能@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"/>'