gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 16:49:31 25 4
gpt4 key购买 nike

从 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 解决了这个问题,但我遇到了类似的问题,所以我想分享一些信息。似乎在创建时设置 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 - 如何在继承自 lxml.ElementBase 的对象中自定义命名空间前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9265534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com