3

こんにちは、lxml を使用して Python3 で XML ファイルを解析し、完全に変更しています。新しい要素を既存の要素に入れ、その親を変更する必要があります。

例: 古い xml

<a>
  <b>something</b>
  <c>something different</c>
</a>

新しいxml

<a>
  <new_parent>
    <b>something</b>
    <c>something different</c>
  </new_parent>
<a>

出来ますか ?

4

1 に答える 1

3

あなたが望むことを直接行う機能があるかどうかはわかりません。私は次のようにします: ノードを作成し、 のnew_parentanew_parentノードに追加し、 に追加new_parentaます。

import lxml.etree

xml = '''<?xml version='1.0' encoding='ASCII'?>
<root>
  <a>
    <b>something</b>
    <c>something different</c>
  </a>
</root>'''

root = lxml.etree.fromstring(xml)
a = root.find('.//a')
parent = lxml.etree.Element('new_parent')
for child in a:
    parent.append(child)
a.append(parent)

print lxml.etree.tostring(root, xml_declaration=True)

印刷 (出力形式は読みやすいように変更されています)

<?xml version='1.0' encoding='ASCII'?>
<root>
  <a>
    <new_parent>
      <b>something</b>
      <c>something different</c>
    </new_parent>
  </a>
</root>

更新extendの複数回の呼び出しの代わりに使用できますappend

root = lxml.etree.fromstring(xml)
a = root.find('.//a')
parent = lxml.etree.Element('new_parent')
parent.extend(a)
a.append(parent)
于 2013-09-28T18:22:54.393 に答える