Я хотел бы проанализировать и сравнить 2 файла XML с парсером Python Etree следующим образом:
У меня есть 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 файла, и если 2 макроса имеют одинаковый идентификатор, замените пустую ссылку во французском файле информацией из английского файла. Раньше я пробовал анализатор 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))
Я более чем невежественен, и чтение других сообщений по этому поводу смущает меня еще больше. Буду очень признателен, если кто-нибудь просветит меня :-)