python lxml:将值从一个xml文件复制到另一个元素匹配的值

时间:2013-09-24 11:36:22

标签: python xml lxml

我有2个xml文件:一个包含样本数据(包含我需要的所有元素),另一个包含实际数据(但没有所有元素)。我想将第二个文件中的实际值复制到我的第一个文件,其中元素名称匹配。

我正在考虑使用迭代器以某种方式实现此目的

文件1

  <VKORG>str1234</VKORG>
  <VTWEG>str1234</VTWEG>
  <SPART>str1234</SPART>
  <KUNNR>str1234</KUNNR>
  <KDGRP>str1234</KDGRP>
  <PLTYP>str1234</PLTYP>
  <KONDA>str1234</KONDA>
  <KONDM>str1234</KONDM>
  <WAERK>str1234</WAERK>
  <MATNR>str1234</MATNR>

文件2

  <VKORG>CH12</VKORG>
  <VTWEG>02</VTWEG>
  <MATNR>000000000010000831</MATNR>

在此示例中,文件2中的3个字段将出现,文件1中的其余字段将保持原样(因为文件2中没有匹配的元素)。

实际文件不是平面的,并且具有多层嵌套元素,可能还有多个根元素。

THX

1 个答案:

答案 0 :(得分:0)

我会通过使用实际值创建文件索引来实现。

然后遍历要填充的文件,在索引中查找内容。类似的东西:

src = lxml.etree.parse('real.xml')
ix = dict()
for n in src.getroot().iterdescendants():
    ix[n.tag] = n

dest = lxml.etree.parse('template.xml')
for n in dest.getroot().iterdescendants():
    if n.tag in ix:
        n.text = ix[n.tag].text

你说它虽然在文件方面比较复杂 - 所以我很难准确地说出来。

编辑:我还没有测试过上面的代码