2017-08-31 119 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

我明白了!

如果有人有更好的辦法做到這一點..請讓我知道,所以我可以改善這一點。

相關問題