首页 > 解决方案 > 如何使用python查找元素并替换xml文件中同名元素的值?

问题描述

我试图找到元素“name”的所有值,而不是“None”,并将它们替换为新值“Anderson”。所以我希望将“Tom”、“John”和“Mary”这两个替换为“Anderson”,但数字7777的名称“None”不会改变。

<aaa>
  <bbb>
    <name>Tom</name><number>1111</number>
    <name>Tom</name><number>2222</number>
    <name>John</name><number>3333</number>
  </bbb>
  <ccc>
    <name>None</name><number>7777</number>
    <name>Mary</name><number>8888</number>
  </ccc>
</aaa>

我只知道如何使用“tree.find()”来替换特定元素的一个值,但我不知道如何查找和替换全部。

例如:

a = tree.find('aaa/bbb/name')
tree.find('aaa/bbb/name').text = 'Anderson'

有没有人可以给我一个达到要求的例子?非常感谢。

标签: pythonxmlreplacefind

解决方案


以下 XPath 表达式可以检索您询问.//name[text()!='None']ElementTree 的节点,但 XPath 支持非常有限,我不确定它是否支持 text() 函数。

另一种选择是:

for name in tree.findall(".//name"):
    if name.text == 'None': continue
    # Do stuff here
    name.text = "Anderson"

https://docs.python.org/3.5/library/xml.etree.elementtree.html#xml.etree.ElementTree.Element.findall


推荐阅读