0

我有 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 中没有匹配的元素)。

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

谢谢

4

1 回答 1

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

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

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

于 2013-09-24T11:45:52.240 回答