2012-08-08 72 views
0

我真的很新的Python和我有以下.xml文件:以XML文件的某些部分與Python

<A> 
    <B> 
    <C>NUM123456</C> 
    <D> 
     <E>123</E> 
     <F>Spam</F> 
     <G>Apple</G> 
    </D> 
    <D> 
     <E>456</E> 
     <F>Egg</F> 
     <G>Orange</G> 
    </D> 
    <D> 
     <E>789</E> 
     <F>Bacon</F> 
     <G>Strawberry</G> 
    </D> 
    <D> 
     <E>0AB</E> 
     <F>Cheese</F> 
     <G>Cherry</G> 
    </D> 
    </B> 
</A> 

我想採取的只是一些部分,以使新.xml文件將是:

<A> 
    <B> 
    <C>NUM123456</C> 
    <D> 
     <E>456</E> 
     <F>Egg</F> 
     <G>Orange</G> 
    </D> 
    <D> 
     <E>0AB</E> 
     <F>Cheese</F> 
     <G>Cherry</G> 
    </D> 
    </B> 
</A> 

我試圖使用.xpath,但它只會開始服用寫入新.xml文件,一旦找到了不同的節點。換句話說,節點<A> <B><C>不包含在新的.xml文件中。任何人都可以幫忙嗎?

謝謝!

+1

重複這個? http://stackoverflow.com/questions/2666436/xml-remove-child-node-of-a-node – jozzas 2012-08-08 22:29:07

+0

那個輸出不是以新行開始的。 – user1546610 2012-08-08 22:56:39

+0

你讀過那裏的答案了嗎?你可以做'tree.listall('D')'並循環遍歷結果來找到你想要刪除的節點。我也不知道「輸出」和「換行」是什麼意思。您加載xml,刪除要刪除的節點,並保存到不同的文件名。 – jozzas 2012-08-08 23:01:22

回答

1

你需要把正確的標準 - 我基於文本值這個過濾器中的例子:

#!/usr/bin/env python 
from xml.etree import ElementTree 
import sys 
tree = ElementTree.ElementTree() 
tree.parse(sys.stdin) 
b = tree.find("B") 
for e in b.getiterator("D"): 
    if e.find("E").text in ["123", "789"]: 
     b.remove(e) 
tree.write(sys.stdout) 

運行這樣的:

./parse.py < file.xml

得到您想要的輸出。

+0

你如何做到這一點pretty_print? – user1546610 2012-08-08 23:56:58