我想用 Python Etree 解析器解析和比较 2 个 XML 文件,如下所示:
我有 2 个包含大量数据的 XML 文件。一种是英文(源文件),另一种是对应的法文翻译(目标文件)。例如:
源文件:
<AB>
<CD/>
<EF>
<GH>
<id>123</id>
<IJ>xyz</IJ>
<KL>DOG</KL>
<MN>dogs/dog</MN>
some more tags and info on same level
<metadata>
<entry>
<cl>Translation</cl>
<cl>English:dog/dogs</cl>
</entry>
<entry>
<string>blabla</string>
<string>blabla</string>
</entry>
some more strings and entries
</metadata>
</GH>
</EF>
<stuff/>
<morestuff/>
<otherstuff/>
<stuffstuff/>
<blubb/>
<bla/>
<blubbbla>8</blubbla>
</AB>
目标文件看起来完全一样,但在某些地方没有文本:
<MN>chiens/chien</MN>
some more tags and info on same level
<metadata>
<entry>
<cl>Translation</cl>
<cl></cl>
</entry>
法语目标文件有一个空的跨语言参考,只要 2 个宏具有相同的 ID,我想将来自英语源文件的信息放入其中。我已经编写了一些代码,其中我用唯一的标签名称替换了字符串标签名称,以便识别跨语言引用。现在我想比较这 2 个文件,如果 2 个宏具有相同的 ID,则将法语文件中的空引用与英语文件中的信息交换。我之前尝试过 minidom 解析器,但卡住了,现在想尝试 Etree。我对编程几乎一无所知,并且觉得这很难。这是我到目前为止的代码:
macros = ElementTree.parse(english)
for tag in macros.getchildren('macro'):
id_ = tag.find('id')
data = tag.find('cl')
id_dict[id_.text] = data.text
macros = ElementTree.parse(french)
for tag in macros.getchildren('macro'):
id_ = tag.find('id')
target = tag.find('cl')
if target.text.strip() == '':
target.text = id_dict[id_.text]
print (ElementTree.tostring(macros))
我不仅一无所知,而且阅读其他关于此的帖子让我更加困惑。如果有人能启发我,我将不胜感激:-)