短版/更新和编辑:
您唯一需要做的就是 (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
它。
- 如果您知道自己总是在追加,请使用
append
而不是insert
,而不是需要跟踪no
原始 xml 中的 's
- 除非你无论如何都需要阅读它来计算下一个'
no
'属性
ET.SubElement(new)
即使已经附加了更新new
(和)。root
new
- 如果您不需要对它们做任何事情,则无需
newsub1
将子元素存储在其中。newsub2
- 第一种方法(如您的方法)创建元素,然后将它们添加到 root 或 new。
- 第二种方法用于
ET.SubElement(new, ...)
将元素添加到其父级。
- 该函数
indent
来自这里,它引用了这个来源。
上面的 Re # 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')
从子元素文档:
此函数创建一个元素实例,并将其附加到现有元素。
(强调我的)