#python #xml #elementtree
Вопрос:
Я знаю, что по этой теме уже есть масса подобных вопросов, но ни одно из решений, похоже, не работает для меня. У меня есть два файла, которые выглядят так:
strings_src.xml:
<resources>
<string name="app_name">SkidSteerLoader</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<string name="title_activity_speed">SpeedActivity</string>
</resources>
strings_da.xml:
<resources>
<string name="title_activity_speed">SpeedActivity</string>
<string name="app_name">SkidSteerLoader</string>
<string name="hello_world">Hej Verden!</string>
</resources>
Структура довольно похожа, но во втором файле может быть меньше элементов.
Мне нужно сравнить имена строк и значения для каждой строки: если имя строки одинаковое, а значение строки одинаковое, мне нужно добавить что-то вроде traduci = «да» в строковый тег второго файла.
Что-то вроде:
<resources>
<string name="title_activity_speed" traduci = "yes">SpeedActivity</string>
<string name="app_name" traduci = "yes">SkidSteerLoader</string>
<string name="hello_world">Hej Verden!</string>
</resources>
Я уже пытался использовать комбинацию циклов for и условий if в python, используя дерево элементов, но я явно делаю что-то не так
import xml.etree.ElementTree as ET
tree_src = ET.parse('strings_src.xml')
root_src = tree_src.getroot()
tree_tar = ET.parse('strings_da.xml')
root_tar = tree_tar.getroot()
for child_src in root_src:
for child_tar in root_tar:
if child_src.tag == child_tar.tag and child_src.text != child_tar.text:
child_tar.set = ('traduci', 'yes')
tree_tar.write('output_da.xml')
Что я могу сделать?
Комментарии:
1. Если вы можете использовать lxml вместо ElementTree, это довольно просто.
Ответ №1:
Вы можете просмотреть каждый файл отдельно, создать словарь с первым файлом dict = {sourceline:elem_text}, затем при повторном просмотре второго файла сравнить каждую строку с dict в памяти и внести необходимые изменения.