3

私は次のxmlコードを持っています:

<data factor="1" name="ini" value="342" />

同じ情報を別の名前でコピーしたい。つまり、最終的な出力は次のようになります。

<data factor="1" name="ini" value="342" />
<data factor="1" name="raw_ini" value="342" />

私は次のことをしようとしました:

model_tag = tree.findall(data_path) #I make sure that data_path is correct.
len_tags = len(model_tag)
i = 0
while i < len_tags: 
    tipo_tag = model_tag[i]
    if tipo_tag.attrib['name']=='ini':
        aux_tag = copy.deepcopy(tipo_tag) #I tried also with copy.copy(tipo_tag).
        aux_tag.attrib['name'] = 'raw_ini'
        model_tag.append(aux_tag)

tree.write(dir_output) 

「copy.deepcopy」を使用する場合、余分な要素はありません。出力は次のとおりです。

<data factor="1" name="ini" value="342" />

「copy.copy」を使用する場合は、要素の名前を変更するだけです。出力は次のとおりです。

<data factor="1" name="raw_ini" value="342" />

私が間違っていることについてのアイデアはありますか?

4

3 に答える 3

1

dataこれらの要素の親を取得し、Element.insert(index, element)メソッドを使用する必要があります。

deepcopyまた、だけでなく andを使用する必要がありますcopy。違いはdeepcopy、2 番目のオブジェクトを作成することですが、(オブジェクトの浅いcopyコピーを返す) を使用すると、最初の要素を変更することになります (これも理解できました)。

要素dataParentの親として持っているとしましょう。data

listData = dataParent.findall('data')
lenData = len(listData)
i = 0
while i < lenData:
    if listData[i].attrib['name'] == 'ini':
        copyElem = copy.deepcopy(dataElem)
        copyElem['name'] = 'raw_ini'
        dataParent.insert([index you wish], copyElem)
    i += 1
于 2013-03-20T15:23:36.840 に答える
1

上記の例の「copy」と「dataElem」はどこから来たのでしょうか? つまり、copyElem = copy .deepcopy( dataElem )

于 2014-03-05T23:28:11.710 に答える