短版/更新和编辑:
您唯一需要做的就是 (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 如果你知道你总是在追加,而不是需要在你的原始xml 中跟踪no
- 除非您无论如何都需要阅读它来计算下一个“
no”属性
-
ET.SubElement(new) 更新 new(和 root),即使 new 已被附加。
- 如果您不需要对子元素进行任何操作,则无需将子元素存储在
newsub1 和newsub2 中。
- 第一种方法(如您的方法)创建元素,然后将它们添加到 root 或 new。
- 第二种方法使用
ET.SubElement(new, ...) 将元素添加到其父级。
-
function
indent is from here,其中quotes this source。
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')
来自Subelement docs:
此函数创建一个元素实例,并将其附加到现有元素。
(强调我的)