2015-09-25 86 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