So i have this kind of XML
file:
<?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>
So what i want to do is each name node
that its search value is starts with select ARG:
i want to duplicate and instead of select ARG:
i want it to be selected ARG:
The other nodes
that not mach this condition (starts with select ARG:
) should remain the same without duplicated.
For example, for the example file i want new file that need to look like this:
<?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>
Currently this is what i have try:
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)
This issue here in my code is that this duplicated all nodes
and not only those that mach my condition.