0

我得到了一个目录,我必须编写一个 python 脚本来创建一个包含该目录中所有 .xml 文件的 xml 文件。

例如,假设 /tmp/ 包含以下 xml 文件:

beans.xml
cakes.xml
donuts.xml

我试图弄清楚如何编写一个创建以下 xml 的脚本:

<root>
   <include file="/tmp/beans.xml"/>
   <include file="/tmp/cakes.xml"/>
   <include file="/tmp/donuts.xml/>
</root>

到目前为止,这是我拼凑起来的,但它每次都会覆盖文件标签,所以只包含 donuts.xml

import lxml.etree
import lxml.builder
import glob
import os

E = lxml.builder.ElementMaker()
ROOT = E.root
DOC = E.include

os.chdir("/tmp/")
for f in glob.glob("*.xml"):
    the_doc = ROOT(

    DOC(file=f)

)

print lxml.etree.tostring(the_doc, pretty_print=True)

这是我的脚本现在的输出:

<root>
    <include file="/tmp/donuts.xml"/>
</root>

如何保持 beans.xml 和 cakes.xml 表单被覆盖?

4

2 回答 2

2

the_doc您在每次迭代中都覆盖。这就是为什么你的输出只有一个元素。试试这个:

os.chdir("/tmp/")
files = [DOC(file=f) for f in glob.glob("*.xml")]
the_doc = ROOT(*files)
print lxml.etree.tostring(the_doc, pretty_print=True)
于 2013-03-12T03:26:42.980 回答
1

我对lxml不太了解,但是阅读文档会导致这个解决方案:

import os
import glob
from lxml import etree

if __name__ == '__main__':
    root = etree.Element('root')
    os.chdir('/tmp')
    for filename in glob.glob('*.xml'):
        root.append(etree.Element('include', file=filename))

    print etree.tostring(root, pretty_print=True) # Or, print to a file if you wish
于 2013-03-12T03:27:41.527 回答