如何使用python

时间:2016-09-07 15:10:00

标签: 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"</value>
<comment>"this is an old value2 of bbbb"</comment>
</data>
</root>

两个是:

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

one.xml将从two.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. 从db
  2. 下载two.xml(整个列表)
  3. 通过two.xml更新我的one.xml(它包含只有应用程序使用的DATA列表)
  4. 任何可以帮助我! 谢谢!

    =============================================== =============== 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>
    
    看来,重新导致麻烦。 你有任何想法修复?

1 个答案:

答案 0 :(得分:0)

你可以使用xml.etree.ElementTree虽然有更优雅的方式,但如果nametwo.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") 是唯一的,那么这应该适用于符合记忆的文件

data

如果您的文件不适合内存,只要单个@future(callout==true) public class JSONParser_GET { public static Map<String, String> mapOfValues= new Map<String,String>(); getRequest() getRequest() getRequest() } 条目适合,您仍然可以使用xml.dom.pulldom