2012-02-13 8 views
3

lxmlのドキュメントから、私はカスタムXML要素がElementBaseから継承されるべきだと理解しています。lxml.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プロパティを設定しようとしましたが、「読み取り専用」の例外があります。 キー/値を追加しても効果はありません(ドキュメントの説明どおり)。

また、私は、これは古く、おそらくこれを解決@rdsが、私は同様の問題に遭遇したので、私はソム情報を共有したいと思った知っている成功

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

答えて

3

ずに、試してみました。 作成時にnsmapを設定すると、少なくとも動作するようです:

>>> etree.tostring(FactVariable(label='qwerty', nsmap={'va':'http://xbrl.org/2008/variable'})) 
'<va:factVariable xmlns:va="http://xbrl.org/2008/variable" label="qwerty"/>' 
関連する問題