我想用Python Etree解析器解析和比较2个XML文件,如下所示:Python用Etree替换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,我想从英文源文件中输入信息。 我已经编写了一些代码,其中我用一个唯一的标记名称替换了字符串标记名称,以便识别跨语言引用。现在我想比较两个文件,如果两个宏具有相同的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))
我比这个无能和阅读其他职位更混淆了我,甚至更多。如果有人能够启发我,我将非常感激:-)
最好附加更复杂的样本以帮助解决方案更正确。 – pepr 2012-07-17 08:04:13