python - Python:XML文件中的重复节点并添加到旧节点
问题描述
所以我有这种XML
文件:
<?xml version="1.0" encoding="UTF-8"?>
<element>
<name search = "select ARG: 123">
<version id = "1.1.1">
<value>bla</value>
<method>blabla</method>
</version>
</name>
<name search = "select ARG: 456">
<version id = "1.1.1">
<value>bla</value>
<method>blabla</method>
</version>
<version id = "1.1.1">
<value>bla</value>
<method>blabla</method>
</version>
<version id = "1.1.1">
<value>bla</value>
<method>blabla</method>
</version>
</name>
<name search = "text ARG: 789">
<version id = "1.1.1">
<value>bla</value>
<method>blabla</method>
</version>
</name>
<name search = "foo ARG: 444">
<version id = "1.1.1">
<value>bla</value>
<method>blabla</method>
</version>
</name>
<name search = "test ARG: Cancel">
<version id = "1.1.1">
<value>bla</value>
<method>blabla</method>
</version>
</name>
</element>
所以我想要做的是每个名称node
,它的搜索值以select ARG:
我想要复制而不是select ARG:
我想要它是selected ARG:
另一个nodes
不符合这个条件的名称(以 开头select ARG:
)应该保持不变而不重复。
例如,对于示例文件,我希望新文件看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<element>
<name search = "select ARG: 123">
<version id = "1.1.1">
<value>bla</value>
<method>blabla</method>
</version>
</name>
<name search = "selected ARG: 123">
<version id = "1.1.1">
<value>bla</value>
<method>blabla</method>
</version>
</name>
<name search = "select ARG: 456">
<version id = "1.1.1">
<value>bla</value>
<method>blabla</method>
</version>
<version id = "1.1.1">
<value>bla</value>
<method>blabla</method>
</version>
<version id = "1.1.1">
<value>bla</value>
<method>blabla</method>
</version>
</name>
<name search = "selected ARG: 456">
<version id = "1.1.1">
<value>bla</value>
<method>blabla</method>
</version>
<version id = "1.1.1">
<value>bla</value>
<method>blabla</method>
</version>
<version id = "1.1.1">
<value>bla</value>
<method>blabla</method>
</version>
</name>
<name search = "text ARG: 789">
<version id = "1.1.1">
<value>bla</value>
<method>blabla</method>
</version>
</name>
<name search = "foo ARG: 444">
<version id = "1.1.1">
<value>bla</value>
<method>blabla</method>
</version>
</name>
<name search = "test ARG: Cancel">
<version id = "1.1.1">
<value>bla</value>
<method>blabla</method>
</version>
</name>
</element>
目前这是我尝试过的:
from xml.dom import minidom
xamlfile = r'C:\1.xml'
newxamlfile = r'C:\new.xml'
xmldoc = minidom.parse(xamlfile)
tags = xmldoc.getElementsByTagName("name")
for item in tags:
str = item.attributes["search_name"].value
if 'select ARG:' in str:
item.attributes["search_name"].value = item.attributes["search_name"].value.replace('select ARG:',
'click ARG:')
with open(xamlfile, "a+") as f:
xmldoc.writexml(f)
我的代码中的这个问题是,这重复了所有nodes
的,而不仅仅是那些符合我的条件的。
解决方案
推荐阅读
- kotlin - Kotlin Exposed 的异常处理 - 如何捕获唯一约束违规异常?
- r - 根据条件改变列,保留原始内容
- python - TypeError:无法读取“列表”类型的对象
- jenkins - Jenkins 声明式管道 - 多分支运行一一构建
- ios - Swift Firebase downloadURL 返回 nil
- python - 如何使用 selenium 和 python 自动化 Flash?
- android - chmod +x gradlew ./gradlew clean build --refresh-dependencies --stacktrace 失败
- flex-lexer - 为正则表达式分配一个变量名并在另一个正则表达式中使用它
- javascript - 如何计算从 Ricoh Theta S Dual FIsh Eye 到 Three.js r71 SphereGeometry 的 UV 映射
- python - Scipy.optimize.minimize 的 x0(初始猜测)等效于 pyOpt?