如何使用python替换xml中的元素

如何使用python替换xml中的元素,python,xml,Python,Xml,对不起,我的英语很差。但我需要你的帮助;( 我有2个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"</val

对不起,我的英语很差。但我需要你的帮助;(

我有2个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>

“旧价值1”
“这是aaaa的旧值1”
“旧价值2”
“这是bbbb的旧值2”
二是:

<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>

“价值1”
“这是aaaa的值1”
“价值2”
“这是bbbb的值2”
“价值3”
“这是中国交建的价值3”
one.xml将从two.xml更新

因此,one.xml应该是这样的

xml(之后):


“价值1”
“这是aaaa的值1”
“价值2”
“这是bbbb的值2”
data name=“cccc”在one.xml中不存在。因此被忽略

实际上我想做的是

  • 从db下载两个.xml(完整列表)
  • 将my one.xml(其中包含仅应用程序使用的数据列表)更新为two.xml
  • 任何人都可以帮我!! 谢谢

    ============================================================== xml.etree.ElementTree
    您的代码与示例相符,但我在实际的xml文件中发现了一个问题

    real 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>
    
    
    text/microsoft resx
    2
    System.Resources.ResXResourceReader,System.Windows.Forms,版本=4.0.0.0,区域性=neutral,PublicKeyToken=b77a5c561934e089
    System.Resources.ResXResourceWriter,System.Windows.Forms,版本=4.0.0.0,区域性=neutral,PublicKeyToken=b77a5c561934e089
    辛维斯:
    输入字段的标签
    z.米尔奇考芬
    notes字段的输入示例
    新进元素
    此字符串出现在按钮上,用于将新项目添加到列表中
    
    看来,这会带来麻烦。 您有什么想法来修复吗?

    您可以使用,虽然可能有更优雅的方法,但如果
    名称在
    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")
    
    如果您的文件不适合内存,您仍然可以使用,只要单个
    数据
    条目适合。

    您可以使用,虽然可能有更优雅的方法,但如果
    名称
    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")
    

    如果文件不适合内存,只要单个
    数据
    条目适合,您仍然可以使用。

    如何将
    one.xml
    更新为
    two.xml
    ?为什么它有python标记?我想使用python脚本更新xml文件。two.xml是一个完整的列表db文件。
    name
    的值在
    数据
    中是唯一的>项目?名称是唯一的。值不是唯一的。这就像语言本地化一样。(en_en.xml)“是”…(ru_ru.xml)“аа”…如何将
    one.xml
    更新为
    two.xml
    ?为什么要使用python标记?我想使用python脚本更新xml文件。two.xml是一个完整的列表数据库文件。
    name
    的值在
    数据
    项中是唯一的?名称是唯一的。值不是唯一的。这类似于语言本地化。(en_en.xml)“是”…(ru_ru.xml)“аа”…明天将试用。无论如何,非常感谢!!上帝保佑你:数据工作正常。但是发现了一个问题:(请看一看哦..这是我的错…我添加了一个例外,如果无法在两个文件中找到数据。xml..明天将试用。无论如何,非常感谢!!上帝保佑你:数据工作正常。但是发现了一个问题:(请看一看哦..这是我的错..我添加了异常,如果在two.xml中找不到数据。。