inkscape:
まず、これは名前空間ではなく、XML ルート要素で定義された名前空間を参照するための便利な方法であることを覚えておいてください。名前空間はhttp://www.inkscape.org/namespaces/inkscape
であり、XML によってinkscape:groupmode
は と同一である可能性がありますfoo:groupmode
。そしてもちろん、<g>
要素は SVG 名前空間の一部ですhttp://www.w3.org/2000/svg
。LXML で適切な出力を生成するには、次のようなものから始めます。
from lxml import etree
root = etree.Element('{http://www.w3.org/2000/svg}svg')
g = etree.SubElement(root, '{http://www.w3.org/2000/svg}g', id='layer-id')
どちらがあなたを得るでしょう:
<ns0:svg xmlns:ns0="http://www.w3.org/2000/svg">
<ns0:g id="layer-id"/>
</ns0:svg>
inkscape 固有の属性を追加するには、次のようにします。
g.set('{http://www.inkscape.org/namespaces/inkscape}groupmode', 'layer')
g.set('{http://www.inkscape.org/namespaces/inkscape}label', 'layer-label')
どちらがあなたを得るでしょう:
<ns0:svg xmlns:ns0="http://www.w3.org/2000/svg">
<ns0:g xmlns:ns1="http://www.inkscape.org/namespaces/inkscape" id="layer-id" ns1:groupmode="layer" ns1:label="layer-label"/>
</ns0:svg>
それを信じるかどうかは、まさにあなたが望むものです。nsmap=
ルート要素を作成するときにパラメーターを渡すことで、名前空間のラベルを少しきれいにすることができます。このような:
NSMAP = {
None: 'http://www.w3.org/2000/svg',
'inkscape': 'http://www.inkscape.org/namespaces/inkscape',
}
root = etree.Element('{http://www.w3.org/2000/svg}svg', nsmap=NSMAP)
これを配置すると、最終的な出力は次のようになります。
<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns="http://www.w3.org/2000/svg">
<g id="layer-id" inkscape:label="layer-label" inkscape:groupmode="layer"/>
</svg>
詳細については、LXML ドキュメントを参照してください。