首页 > 解决方案 > 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的,而不仅仅是那些符合我的条件的。

标签: pythonxml

解决方案


推荐阅读