Python:在XML文件中复制节点并添加到旧节点

时间:2019-03-28 09:48:32

标签: 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:,我希望它成为{{1} } 另一个没有达到此条件的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) ,而不仅重复了符合我条件的那些。

0 个答案:

没有答案
相关问题