6
<grandParent>
    <parent>
       <child>Sam/Astronaut</child>
    </parent>
</grandParent>

親タグ内に別の子タグを追加して、上記の XML を変更したいと考えています。私はこのようなことをしています..

tree = ET.parse("test.xml")
a=ET.Element('parent')
b=ET.SubElement(a,"child")
b.text="Jay/Doctor"
tree.write("test.xml")

これはxmlファイルを変更する正しい方法ですか? もっと良い方法はありますか?または、上記のコードで他に何を処理する必要がありますか?

4

1 に答える 1

9

コードはまったく新しいツリーを作成し、それに Jay を追加します。Jay を新しいツリーではなく、既存のツリーに接続する必要があります。

これを試して:

import xml.etree.ElementTree as ET

tree = ET.parse("test.xml")
a = tree.find('parent')          # Get parent node from EXISTING tree
b = ET.SubElement(a,"child")
b.text = "Jay/Doctor"
tree.write("test.xml")

特定の子供を検索する場合は、次のようにします。

import xml.etree.ElementTree as ET
tree = ET.parse("test.xml")
a = tree.find('parent')
for b in a.findall('child'):
    if b.text.strip() == 'Jay/Doctor':
        break
else:
    ET.SubElement(a,"child").text="Jay/Doctor"
tree.write("test.xml")

注意a.findall()( に似てa.find()いますが、名前付き要素をすべて返します)。の検索条件xml.etree非常に限られています。lxml.etreeとその.xpath()方法を使用することを検討してください。

于 2014-07-31T20:55:30.763 に答える