我有一个目录,我必须编写一个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表单?
答案 0 :(得分: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)
答案 1 :(得分: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