python元素树:更新子

2024-09-29 23:16:16 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有这个xml文件:

<root>
  <abc>SomeTree1</abc>
  <abc>SomeTree2</abc>
  ...
</root>

我想对“abc”中的元素做一些运算。 所以我做了这样的事情:

^{pr2}$

(function1操作元素并返回其更新版本)。 如何用新的元素而不是元素更新root? (可能类似于:元素集(新元素)?在

谢谢你


Tags: 文件版本元素rootxml事情abc新元素
1条回答
网友
1楼 · 发布于 2024-09-29 23:16:16

可以将树的root传递给函数,然后使用ElementTree.SubElementroot添加新元素。我用过你的例子:

import xml.etree.ElementTree as ET

def function(root):
    new_element = ET.SubElement(root, "abc")
    new_element.set("name", "Jonas")
    new_element.text = "This is text"

tree = ET.parse("test.xml")
root = tree.getroot()

# Before
print ET.tostring(root)

for element in root.findall("./abc"):
    function(root)

# After
print ET.tostring(root)

在此之前:

^{pr2}$

之后:

<root>
  <abc>SomeTree1</abc>
  <abc name="Jonas">This is text</abc>
</root>

请注意,我自己已经润色了xml,它在默认情况下并不漂亮。如果你想要漂亮的打印,请查看this答案。在

编辑:抱歉,我从评论中认为您想添加一个新元素,而不是替换当前元素。要替换该元素,您可以修改上面的函数以接受元素,然后在删除原始元素之前添加一个新元素,或者直接修改现有元素:

import xml.etree.ElementTree as ET

def function(element):
    element.text = "New text"
    element.tag = "New tag"
    element.set("name", "Jonas")

tree = ET.parse("test.xml")
root = tree.getroot()

# Before
print ET.tostring(root)

for element in root.findall("./abc"):
    function(element)

# After
print ET.tostring(root)

在此之前:

^{pr2}$

之后:

<root>
  <New tag name="Jonas">New text</New tag>
</root>

相关问题 更多 >

    热门问题