2016-09-07 8 views
1

私の貧しい人々のために申し訳ありません。しかし、私はあなたの助けが必要。私は2つのxmlファイルを持っている(Pythonを使用してxmlの要素を置き換える方法

一つです:。

<root> 
<data name="aaaa"> 
<value>"old value1"</value> 
<comment>"this is an old value1 of aaaa"</comment> 
</data> 
<data name="bbbb"> 
<value>"old value2"</value> 
<comment>"this is an old value2 of bbbb"</comment> 
</data> 
</root> 

2は次のとおりです。2から更新されますone.xml

<root> 
<data name="aaaa"> 
<value>"value1"</value> 
<comment>"this is a value 1 of aaaa"</comment> 
</data> 
<data name="bbbb"> 
<value>"value2"</value> 
<comment>"this is a value2 of bbbb"</comment> 
</data> 
<data name="cccc"> 
<value>"value3"</value> 
<comment>"this is a value3 of cccc"</comment> 
</data> 
</root> 

。 xml。

したがって、one.xmlはこのようになります。

(後)

one.xml:

<root> 
<data name="aaaa"> 
<value>"value1"</value> 
<comment>"this is a value1 of aaaa"</comment> 
</data> 
<data name="bbbb"> 
<value>"value2"</value> 
<comment>"this is a value2 of bbbb"</comment> 
</data> 
</root> 

データ名= "CCCC" がone.xmlに存在していません。したがって無視される。

は実際に私が何をしたいのか

  • デシベルから

    1. ダウンロードtwo.xml(全リスト)である2で(それが唯一のアプリケーションが使用するデータ・リストが含まれています)私のone.xmlを更新します。 XML

    どれが私を助けてくださいすることができます! ありがとうございます!

    ============================================== ================ xml.etree.ElementTree
    あなたのコードはこの例で動作します。しかし、私は実際のXMLファイルで問題を発見した。

    本当one.xmlは含まれています。それはそう

    <?xml version="1.0" encoding="utf-8"?> 
    <root> 
        <resheader name="resmimetype"> 
         <value>text/microsoft-resx</value> 
        </resheader> 
        <resheader name="version"> 
         <value>2.0</value> 
        </resheader> 
        <resheader name="reader"> 
         <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> 
        </resheader> 
        <resheader name="writer"> 
         <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> 
        </resheader> 
    
        <data name="NotesLabel" xml:space="preserve"> 
         <value>Hinweise:</value> 
         <comment>label for input field</comment> 
        </data> 
        <data name="NotesPlaceholder" xml:space="preserve"> 
         <value>z . Milch kaufen</value> 
         <comment>example input for notes field</comment> 
        </data> 
        <data name="AddButton" xml:space="preserve"> 
         <value>Neues Element hinzufügen</value> 
         <comment>this string appears on a button to add a new item to the list</comment> 
        </data> 
    </root> 
    

    、resheaderは、トラブルの原因となります。 修正することをお考えですか?

  • +0

    'one.xml'を' two.xml'に更新する方法は?なぜPythonタグを持っているのですか? –

    +0

    pythonスクリプトを使ってxmlファイルを更新したい。 –

    +0

    two.xmlはフルリストのdbファイルです。 –

    答えて

    0

    あなたのファイルはあなたができるメモリに収まらない場合はname sがtwo.xml

    import xml.etree.ElementTree as ET 
    tree_one = ET.parse('one.xml') 
    root_one = tree_one.getroot() 
    tree_two = ET.parse('two.xml') 
    root_two = tree_two.getroot() 
    
    data_two=dict((e.get("name"), e) for e in root_two.findall("data")) 
    
    for eo in root_one.findall("data"): 
        name=eo.get("name") 
        tail=eo.tail 
        eo.clear() 
        eo.tail=tail 
        en=data_two[name] 
        for k,v in en.items(): 
         eo.set(k,v) 
        eo.extend(en.findall("*")) 
        eo.text=en.text 
    
    tree_one.write("one.xml") 
    

    で一意である場合は、xml.etree.ElementTreeを使用することができますし、propablyよりエレガントな方法がありますが、これはメモリに収まるファイルで動作するはずです単一のdataエントリが適合する限り、依然としてxml.dom.pulldomを使用してください。

    +0

    ありがとう!今私はオフィスを離れて –

    +0

    明日それを試してみるだろう。とにかくありがとう!神はあなたを祝福します:D –

    +0

    私はこれがうまくいくことを望みます。 :) – janbrohl

    関連する問題