【问题标题】:Compare attribute values and texts between two xml files and write to file in Python比较两个 xml 文件之间的属性值和文本并在 Python 中写入文件
【发布时间】:2021-03-16 11:05:05
【问题描述】:

我知道关于这个主题已经有很多类似的问题,但似乎没有一个解决方案适合我。 我有两个看起来像这样的文件:

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 = "yes" 的内容第二个文件的标签。 比如:

 <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>

我已经尝试使用元素树在 python 中结合使用 for 循环和 if 条件,但我显然在那里做错了

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')

我能做什么?

【问题讨论】:

  • 如果可以用lxml代替ElementTree,那就很简单了。

标签: python xml elementtree


【解决方案1】:

您可以单独遍历每个文件,使用第一个文件 dict = {sourceline:elem_text} 构建一个字典,然后在遍历第二个文件时将每一行与内存中的字典进行比较,并根据需要进行更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多