0

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.

falukky
  • 1,099
  • 2
  • 14
  • 34

0 Answers0