python-从一个文件中解析特定的XML属性,并将其追加到另一个文件中,前提是第二个文件中存在另一个属性

我有三个XML文件(下面的示例).我已经用各自的audioId属性值命名了文件.因此,有问题的文件将称为93.xml和2137.xml:

93.xml:

<word BloomsTaxonomy="1,2,3" DictationGroupid="i-e combination List 7" Stage="0" Use="P,L" audioId="93" />

2173.xml:

<word BloomsTaxonomy="1,2,3" DictationGroupid="i-e combination List 7" Stage="0" Use="P,L" audioId="2137" />

mainDataSet.xml:

<word id="2137" title="over" level="1" grouping="Sight Words" YRule="0" MagicE="0" SoftC="0" doublevowel="0" longvowel="0" displayorder="101" silentletters="0"/>

文件mainDataSet.xml包含约3,000个条目.为了这个问题,我仅提供了一个条目.

我的问题是关于如果两个文件中的ID都匹配(或者即使mainDataSet.xml中的ID与文件名匹配),我如何将mainDataSet.xml中的title属性附加到mainDataSet.xml中的2173.xml中的word标签上. .例如,在我提供的示例中,输出应为:

<word BloomsTaxonomy="1,2,3" DictationGroupid="i-e combination List 7" Stage="0" Use="P,L" audioId="2137" title="over" />

要从mainDataSet.xml解析我的XML,我目前正在做:

e = xml.etree.ElementTree.parse('mainDataSet.xml').getroot()
for atype in e.findall('word'):
    print(atype.get('title'))

解决方法:

要添加属性,请使用.attrib字典.这是一个示例代码,它循环遍历mainDataSet.xml内部的word元素,检索id属性值,解析适当的XML文件(在这种情况下为93.xml和2173.xml),更新word元素并将树转储回去到文件:

import xml.etree.ElementTree as ET


e = ET.parse('mainDataSet.xml').getroot()
for word in e.findall('word'):
    word_id = word.attrib.get("id")
    if word_id:
        filename = "%s.xml" % word_id
        e_word = ET.parse(filename)
        e_word.getroot().attrib['title'] = word.attrib.get('title')
        e_word.write(filename)

我使用的样本mainDataSet.xml:

<words>
    <word id="2137" title="over" level="1" grouping="Sight Words" YRule="0" MagicE="0" SoftC="0" doublevowel="0" longvowel="0" displayorder="101" silentletters="0"/>
    <word id="93" title="something else" level="1" grouping="Sight Words" YRule="0" MagicE="0" SoftC="0" doublevowel="0" longvowel="0" displayorder="101" silentletters="0"/>
</words>

这是运行脚本后得到的信息:

> 93.xml:

<word BloomsTaxonomy="1,2,3" DictationGroupid="i-e combination List 7" Stage="0" Use="P,L" audioId="93" title="something else" />

> 2173.xml:

<word BloomsTaxonomy="1,2,3" DictationGroupid="i-e combination List 7" Stage="0" Use="P,L" audioId="2137" title="over" />
上一篇:python使用lxml和xpath解析html表上的特定数据


下一篇:像使用C#读取python的lxml一样读取XML文件吗?