使用python将多个xml文件中的单个元素替换为来自不同集合的相同元素

2024-09-27 22:38:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个单独的xml文件夹;一个文件夹包含相同记录的旧版本,另一个文件夹包含更新版本。我需要用较旧的元素替换较新集合中每条记录中的一个元素。褶皱:文件名不匹配,需要保留较新文件集的文件名。也就是说,每个记录都有一个唯一的值,可以用作匹配文件的键字段

需要替换的元素集是<mods:name>。示例:以下内容-

      <mods:name>
         <mods:namePart>Example creator</mods:namePart>
         <mods:role>
            <mods:roleTerm type="text">creator</mods:roleTerm>
         </mods:role>
      </mods:name>

需要替换为-

      <mods:name>
         <mods:namePart>Example creator</mods:namePart>
         <mods:role>
            <mods:roleTerm type="text">creator</mods:roleTerm>
         </mods:role>
         <mods:namePart>Example owner</mods:namePart>
         <mods:role>
            <mods:roleTerm type="text">owner</mods:roleTerm>
         </mods:role>
      </mods:name>

可以用作键的字段是<mods:identifier>(它出现在完整文件中,但在这些代码段中没有显示)。示例-

<mods:identifier type="local">dc_031_001</mods:identifier>

我想要某种python解决方案,但我愿意接受建议。非常感谢你的阅读


Tags: 文件textname文件夹mods元素文件名example
1条回答
网友
1楼 · 发布于 2024-09-27 22:38:00
import etree as ET

root = ET.getroot('old_doc')

replacement_dict = {}

identifiers = root.findall('.//mods:identifier')

for identifier in identifiers:
   #this part is a little wishy washy because I can't see the relationship between identifier element and the elements you want
   try:   
      identifier_text = identifier.text
      replacement_elem = #use a .find or a getnext or whatever depending on the relationship
      replacement_elem_text = replacement_elem.text    
      temp_dict = {identifier_text: replacement_elem_text}

root2 = ET.getroot('new_doc')

new_identifiers = root2.findall('mods:identifier')

for new_identifier in new_identifiers:
   #get both elements as before
   if new_identifier.text in replacement_dict:
      elem_to_be_replaced.text = replacement_dict.get(new_identifier_text)

其中一些是伪代码,但它应该能帮助您找到需要去的地方

相关问题 更多 >

    热门问题