2015-09-25 87 views
1

如何在Python 2.7中使用LXML「重置」etree?如何使用lxml重置etree

我有一個包含文件列表的文件。對於此列表中的每個文件,我都將信息存儲在LXML的元素樹中,然後將LXML寫入文件。一旦我寫入文件,我想要做的就是將etree恢復到初始狀態。

從概念上講,這是我在哪裏:

from lxml import etree 

for file in list: 
    quiz = etree.Element('quiz') 
    open file and process contents: 
     "add a bunch of stuff to etree" 
     etree.SubElement(quiz,'stuff') 
     "print etree to xml file" 
     dataOut = etree.tostring(quiz, pretty_print = True) 
     output_file.write(dataOut) 
     "reset etree to blank file" 
+1

難道你不會在每次迭代中都得到一個全新的'quiz'元素嗎?爲什麼你需要重置樹?謝謝。 – alecxe

+0

它看起來像是在etree對象中「堆疊」測驗,所以當我寫dataOut來將它的前一次迭代和當前迭代連接起來。像文件1 == 1kb,文件2 = 2kb等,內容總是最後加上下一個。 –

+0

明白了。你能顯示'etree'來自哪裏嗎?謝謝。 – alecxe

回答

1

我沒有看到下面的設置類似一個你的任何問題:它打印

from lxml import etree 

for item in ["test1", "test2", "test3"]: 
    quiz = etree.Element('quiz') 

    etree.SubElement(quiz, 'stuff', attrib={"attr": item}) 
    print etree.tostring(quiz, pretty_print = True) 
    print "---" 

<quiz> 
    <stuff attr="test1"/> 
</quiz> 

--- 
<quiz> 
    <stuff attr="test2"/> 
</quiz> 

--- 
<quiz> 
    <stuff attr="test3"/> 
</quiz> 

--- 

我沒有看到測驗堆棧,這可能意味着問題是在您的真實代碼中的其他地方。

+0

你是對的。問題出在我的代碼中。我將Quiz元素設置在列表級別,而不是文檔級別。 –

+0

事後看來,我應該剛剛發佈了我的代碼,但它是100行,所以我認爲只寫我想要完成的事情,而不是導致失敗的原因會更容易。] –

+0

@ KurtisAS-K好的,它會發生。重要的是現在已經解決了。 – alecxe