修改整个 XML 属性,然后将所有结果合并为一个 XML

Modify entire XML attributes then merge all results into one XML

我正在编写 ElementTree python 代码将:

  1. 修改xml中的itemID并写入磁盘。
  2. 转到 itemIDList 中的下一个 itemID 修改 xml 中的 itemID 并写入磁盘

问题是 XML 被一遍又一遍地覆盖,我想要的是将数据附加到新 xml 文件的末尾。

到目前为止,这是我的代码。

base_path = os.path.dirname(os.path.realpath(__file__))
xml_file = os.path.join(base_path, 'data.xml')
tree = ET.parse(xml_file)
root = tree.getroot()

with open('a.txt', 'r') as f:

    d = f.readlines()
    itemIDlist = []
    for i in range(len(d)-1):
        hold = d[i].split('\n')
        itemIDlist.append(str(hold[0]))
        for e in root.iter():

            if 'itemID' in e.keys():
                e.set('itemID', itemIDlist[i])
                new_data = ET.tostringlist(root)
                new_xml = open('newXml.xml', 'w')
                new_xml.write(new_data)

文本文件有一个这样的数字列表;我们称之为 a.txt

19283
29354
34958
59854

原始 XML 文件如下所示

    <requests>
    <inventory name="WaterMelon" itemID="6834833" action="inStock">
        <user username="Carlos">
            <role name="GeneralManager"/>
        </user>
    </inventory>
    <inventory name="StrawBerry" itemID="9283343" action="inStock">
        <user username="Carlos">
            <role name="GeneralManager"/>
        </user>
    </inventory>
    <inventory name="WaterMelon" itemID="" action="inStock">
        <user username="Carlos">
            <role name="GeneralManager"/>
        </user>
    </inventory>-->
</requests>

目前我得到了四个不同的文件,但是,我只想得到一个包含所有结果的 XML 文件。它应该看起来像这样

<requests>
    <inventory action="inStock" itemID="19283" name="WaterMelon">
        <user username="Carlos">
            <role name="GeneralManager" />
        </user>
    </inventory>
    <inventory action="inStock" itemID="19283" name="StrawBerry">
        <user username="Carlos">
            <role name="GeneralManager" />
        </user>
    </inventory>
    <inventory action="inStock" itemID="19283" name="WaterMelon">
        <user username="Carlos">
            <role name="GeneralManager" />
        </user>
    </inventory>-->

    <inventory action="inStock" itemID="29354" name="WaterMelon">
        <user username="Carlos">
            <role name="GeneralManager" />
        </user>
    </inventory>
    <inventory action="inStock" itemID="29354" name="StrawBerry">
        <user username="Carlos">
            <role name="GeneralManager" />
        </user>
    </inventory>
    <inventory action="inStock" itemID="29354" name="WaterMelon">
        <user username="Carlos">
            <role name="GeneralManager" />
        </user>
    </inventory>-->

    <inventory action="inStock" itemID="34958" name="WaterMelon">
        <user username="Carlos">
            <role name="GeneralManager" />
        </user>
    </inventory>
    <inventory action="inStock" itemID="34958" name="StrawBerry">
        <user username="Carlos">
            <role name="GeneralManager" />
        </user>
    </inventory>
    <inventory action="inStock" itemID="34958" name="WaterMelon">
        <user username="Carlos">
            <role name="GeneralManager" />
        </user>
    </inventory>-->
</requests>

请帮忙

这个link有同样的问题。

我连接了字符串。

with open('a.txt', 'r') as f:

d = f.readlines()
itemIDlist = []
new_data = ''
for i in range(len(d)-1):
    hold = d[i].split('\n')
    itemIDlist.append(str(hold[0]))
    for e in root.iter():

        if 'itemID' in e.keys():
            e.set('itemID', itemIDlist[i])

    new_data += ET.tostring(root)
new_xml = open('newXml.xml', 'w')
new_xml.write(new_data)

这给了我们预期的结果;一个 xml 个文件。

    <requests>
    <inventory action="inStock" itemID="19283" name="WaterMelon">
        <user username="Carlos">
            <role name="GeneralManager" />
        </user>
    </inventory>
    <inventory action="inStock" itemID="19283" name="StrawBerry">
        <user username="Carlos">
            <role name="GeneralManager" />
        </user>
    </inventory>
    <inventory action="inStock" itemID="19283" name="WaterMelon">
        <user username="Carlos">
            <role name="GeneralManager" />
        </user>
    </inventory>--&gt;
</requests><requests>
    <inventory action="inStock" itemID="29354" name="WaterMelon">
        <user username="Carlos">
            <role name="GeneralManager" />
        </user>
    </inventory>
    <inventory action="inStock" itemID="29354" name="StrawBerry">
        <user username="Carlos">
            <role name="GeneralManager" />
        </user>
    </inventory>
    <inventory action="inStock" itemID="29354" name="WaterMelon">
        <user username="Carlos">
            <role name="GeneralManager" />
        </user>
    </inventory>--&gt;
</requests><requests>
    <inventory action="inStock" itemID="34958" name="WaterMelon">
        <user username="Carlos">
            <role name="GeneralManager" />
        </user>
    </inventory>
    <inventory action="inStock" itemID="34958" name="StrawBerry">
        <user username="Carlos">
            <role name="GeneralManager" />
        </user>
    </inventory>
    <inventory action="inStock" itemID="34958" name="WaterMelon">
        <user username="Carlos">
            <role name="GeneralManager" />
        </user>
    </inventory>--&gt;
</requests>

还有一个问题,当生成 xml 时有一个 > 没有得到正确的解释并输出
&gt; 而不是 >.