0

2 つの xml ファイルがあります。1 つはサンプル データ (必要なすべての要素を含む) を含み、もう 1 つは実際のデータ (ただし、すべての要素を含むわけではありません) を含みます。要素名が一致する最初のファイルに、2 番目のファイルから実際の値をコピーしたいと思います。

どういうわけかイテレータを使用してこれを達成することを考えていました

ファイル 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 に答える