如何更改elementtree中多个同名元素的文本

问题描述 投票:0回答:1

所以我有一个 XML,其中有一行:

<factor>1.2</factor>

这一行在我的 XML 中出现了两次。

我想更改两行的文本,以便它们两者更改为:

<factor>0.5</factor>

我的代码如下:

import xml.etree.ElementTree as ET
xml_tree = ET.parse(TestXML.xml)
root = xml_tree.getroot()
root.find(".//{*}factor").text = "0.5" 
ET.tostring(root)

现在这会更改我的 XML 中的第一个因子行,但不会更改第二个因子行。

我尝试过做

root.findall(".//{*}factor").text = "0.5"

但我收到错误消息

AttributeError                            Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_5072\1499665917.py in <module>
      3 xml_tree = ET.parse(TestXML.xml)
      4 root = xml_tree.getroot()
----> 5 root.findall(".//{*}factor").text = "0.5" 
      6 ET.tostring(root)

AttributeError: 'list' object has no attribute 'text'

我想知道我是否必须创建一个循环才能做到这一点,因为 findall 不起作用? 任何建议将不胜感激。

我希望能够对任何变量执行此操作。所以我有一条与出生日期相对应的行。但该行出现了 10 次,所以我想更改所有 10 行,例如

python xml-parsing elementtree
1个回答
0
投票

尝试类似的事情

for factor in root.findall(".//{*}factor"):
     factor.text = "0.5" 

看看它是否有效。如果是这样,您可以将

factor
替换为任何其他元素名称。

© www.soinside.com 2019 - 2024. All rights reserved.