0

ディレクトリが与えられ、そのディレクトリ内のすべての.xmlファイルを含むxmlファイルを作成するPythonスクリプトを作成する必要があります。

たとえば、/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各反復で上書きしています。そのため、出力には1つの要素しかありません。これで試してください:

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 に答える