ショートバージョン /更新と編集:
あなたがしなければならないことは、(A)newsub1
とnewsub2
を に追加することだけですnew
。(B) に追加new
しroot
ます。
root = ET.fromstring(xml) # or whichever way you're getting `root`
# these 3 lines form your code:
new = ET.Element('vehicleTravelTimeMeasurement', name="kkk", no="4")
newsub1 = ET.Element('start', link='1', pos='3.88888')
newsub2 = ET.Element('end', link='3', pos='3.88888')
# the next steps to add
new.append(newsub1)
new.append(newsub2)
root.append(new)
(A) と (B) は任意の順序で実行でき、以下のように短縮できることに注意してください。
>>> root = ET.fromstring(xml)
>>> new = ET.Element('vehicleTravelTimeMeasurement', name="kkk", no="4")
>>> root.append(new) # note that I've immediately added `new`
>>> ET.SubElement(new, 'start', link='1', pos='3.88888')
<Element 'start' at 0x24707b8>
>>> ET.SubElement(new, 'end', link='3', pos='3.88888')
<Element 'end' at 0x24ea978>
>>> # there's no need to store the subelements in `newsub1` and
... # `newsub2` if you don't need to do anything with them
...
>>> indent(root)
>>> print ET.tostring(root)
<vehicleTravelTimeMeasurements>
<vehicleTravelTimeMeasurement name="ckkkkkkkkkk" no="2">
<start link="1" pos="3.864983" />
<end link="3" pos="23.275375" />
</vehicleTravelTimeMeasurement>
<vehicleTravelTimeMeasurement name="" no="3">
<start link="1" pos="3.864983" />
<end link="2" pos="13.275375" />
</vehicleTravelTimeMeasurement>
<vehicleTravelTimeMeasurement name="kkk" no="4">
<start link="1" pos="3.88888" />
<end link="3" pos="3.88888" />
</vehicleTravelTimeMeasurement>
</vehicleTravelTimeMeasurements>
ノート:
- 作成直後に追加
new
しました。root
- 元の xml で
を追跡する必要があるのではなく、常に追加していることがわかっている場合は
append
代わりに使用しますinsert
no
no
次の ' ' 属性を計算するためにとにかくそれを読む必要がない限り
ET.SubElement(new)
更新new
(およびroot
)new
が既に追加されている場合でも。
- サブ要素を保存する必要は
newsub1
ありnewsub2
ません。サブ要素を使用して何もする必要がない場合。
- 最初のメソッド(あなたのようなもの)は要素を作成し、それらをルートまたは新規に追加します。
- 2 番目のメソッドは
ET.SubElement(new, ...)
、要素をその親に追加するために使用します。
- 関数
indent
は here からのもので、この source を引用しています。
上記の # 4.2 については、次のようにすることもできます。
root = ET.fromstring(xml)
new = ET.SubElement(root, 'vehicleTravelTimeMeasurement', name="kkk", no="4")
# `new` is already created as a subelement of `root` and appended
ET.SubElement(new, 'start', link='1', pos='3.88888')
ET.SubElement(new, 'end', link='3', pos='3.88888')
サブエレメントのドキュメントから:
この関数は要素インスタンスを作成し、それを既存の要素に追加します。
(私のものを強調)