2017-08-31 62 views
0

我想将整个标记添加到xml,下面是我的XML格式。python:在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>'))) 

这是消除毕竟其他内容新的内容。 任何帮助将不胜感激。!

回答

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中的标签名称,但您在代码中保留了长版本,这很烦人,因为想要回答您的人必须再次更改代码以查看它是否存在工作中。
+0

同意,我回去检查了这一点。第一种方法是按照它应该的方式工作的。谢谢回复,! 第一:因为XML文件有超过200行..我认为所有这些细节是不需要的。 第2次:从现在开始,我会照顾这个关键词..! – tgcloud

+0

是的,我做的第一个方法是给我appenders.insert(0,无)并抛出异常。但我发誓它之前一直在为我工作(删除新内容后的所有其他内容)。我想我在发布代码的时候搞砸了一些东西(我根本不应该对变量进行更改) – tgcloud

0

我明白了!

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

相关问题