python - 如何使用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'
有没有人可以给我一个达到要求的例子?非常感谢。
解决方案
以下 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
推荐阅读
- c - 声明变量的顺序有区别吗?
- javascript - 在Angular中按下后退按钮时硬重新加载页面
- python-3.x - TypeError:回调()得到了一个意外的关键字参数“prevent_initial_call”
- php - 如何在 PHP 中使用 html 标签包装字符串
- php - 使用 PHPUnit 测试 F3 请求模拟时 GitLab CI 上的弃用错误
- arrays - 在查询结果中包含工作表名称 - Google 工作表
- c# - 为了清楚起见,我是否将脚本分成两部分,或者为部分共享的代码创建方法
- rust - 如何在 Rust 中创建一个 HashMap,它可以使用映射的值进行 4 到 5 倍的深度?
- java - 是否可以使用 guice 在 java 接口中注入依赖项 - java
- surface - 如何使用 OPENCASCADE 使用截面制作实体