python:在xml中追加新数据会覆盖现有数据

时间:2017-08-31 13:08:31

标签: python xml python-2.7 lxml

我想将整个标记添加到xml,下面是我的XML格式。

<?xml version="1.0" encoding="UTF-8"?>
<ca st="true" name="XMLConfig">
    <app>
        <!---   I want to add entire commneted tag to XML . ! 
        <ar ty="co" name="st">    
            <ly ty="pt">
                 <pt>value</pt>
            </Layout>
        </ar>                    -->

        <roll name="roll" fN="file.log" fP="logs.gz">
            <ly type="ptl">
                 <pt>value</pt>
            </ly>
            <po>
    <!--            Comment /> -->
                <si size="100 MB" />
        <!--        Comment /> -->
            </po>
            <de fI="max" max="10"/>   
        </roll>       
    </app>

如上面的文件所示,我想在文件中添加此标记

    <ar ty="co" name="st">    
        <ly ty="pt">
             <pt>value</pt>
        </Layout>
    </ar>

这是我到目前为止的地方..

for appenders in tree.xpath('//Appenders'):
    if appenders.getchildren():
        appenders.remove(appenders.getchildren()[0])
        appenders.insert(0, appenders.getparent().append(etree.fromstring('<ar ty="co" name="st"> <ly ty="pt"><pt>value</pt></Layout></ar>')))

这是删除新内容后的所有其他内容。 任何帮助将不胜感激。!

2 个答案:

答案 0 :(得分:1)

在我看来,你做到的第一种方式更好。您刚刚在insert行中犯了一些错误,应该是这样的:

appenders.insert(0, etree.fromstring('<ar ty="co" name="st"> <ly ty="pt"><pt>value</pt></ly></ar>')))

我很惊讶它没有为你抛出错误,因为你的插入行基本上是这样的:

appenders.insert(0,None)

此外,我注意到你在所有问题中都做了一些事情:

  1. 您遗漏了xml文件的某些行。 (我的意思是为什么?)
  2. 你缩短了xml中的标签名称,但你在代码中保留了它们的长版本,这有点令人讨厌,因为想要回答你的人必须再次更改代码以查看它是否正常工作。

答案 1 :(得分:0)

我搞定了,!

for apps in tree.xpath('//app'):  
    if appenders.tag == 'app':
        appenders.insert(0, etree.SubElement(appenders, 'ar', ty="Co", name="st"))
        for appender in tree.xpath('//ar'):
            appender.insert(0, etree.SubElement(appender, 'ly', ty="pt"))
            for layout in tree.xpath('//ly'):
                layout.insert(0, etree.SubElement(layout, 'pt'))
                for pattern in tree.xpath('//pt'):
                    pattern.text = 'value'


tree.write(r'C:\value.xml', xml_declaration=True, encoding='UTF-8')  

如果有人有更好的方法做到这一点..请让我知道,以便我可以改善这一点。