0
<node a='1' b='1'>
<subnode x='25'/>
</node>
私はタグ名と最初のノードのすべての属性、すなわち、逐語的にコードを抽出したいと思います:なし
<node a='1' b='1'>
をサブノード
Pythonで例えば、あまりtostring
戻り値:
from lxml import etree
root = etree.fromstring("<node a='1' b='1'><subnode x='25'>some text</subnode></node>")
print(etree.tostring(root))
戻り
b'<node a="1" b="1"><subnode x="25">some text</subnode></node>'
以下は、所望の結果を与えるが、あまりにも冗長である:
tag = root.tag
for att, val in root.attrib.items():
tag += ' '+att+'="'+val+'"'
tag = '<'+tag+'>'
print(tag)
結果:
<node a="1" b="1">
これを行う方が簡単な(そして保証された属性の順序を保つ)方法は何ですか?
*「保証された属性の順序を保持する」*は巨大なコードの匂いです。 ''文字列で何をしようとしていますか? –
Tomalak
@Tomalak私は、実際のサブツリーの移動やノード除去の簿記の問題を踏まずに、いくつかの上位レベルノードといくつかの下位レベルノード(中間レベルノードをスキップ)から新しいツリーを構築したいと考えています。 – Marijn
ツリー変換が目的ならば、XSLTを見ることをお勧めします。これはタスクに最も適したツールです.XSLTソリューションは、通常、同等のDOM APIコードよりもはるかにエレガントです。合理的に完成した入力文書とそれに必要な出力を投稿します。つまり、XMLでは属性の順序は重要ではありません。属性の順序に依存するシステムを作成しないでください。 – Tomalak