使用Python解析大型组合XML文档

时间:2013-03-26 18:48:47

标签: python xml elementtree

我有一个大文档(400 mb),其中包含数百个XML文档,每个文档都有自己的声明。我试图使用Python中的ElementTree解析每个文档。我在拆分每个XML文档以解析信息时遇到了很多麻烦。以下是文档的示例:

<?xml version="1.0"?>
<data>
    <more>
       <p></p>
    </more>
</data>
<?xml version="1.0"?>
<different data>
    <etc>
       <p></p>
    </etc>
</different data>
<?xml version="1.0"?>
<continues.....>

理想情况下,我想阅读每个XML声明,解析数据,然后继续下一个XML文档。任何建议都会有帮助。

1 个答案:

答案 0 :(得分:2)

您需要单独阅读文件;这是一个生成器函数,它将从给定的文件对象中生成完整的XML文档:

def xml_documents(fileobj):
    document = []
    for line in fileobj:
        if line.strip().startswith('<?xml') and document:
                yield ''.join(document)
                document = []
        document.append(line)

    if document:
        yield ''.join(document)

然后使用ElementTree.fromstring()加载和解析这些:

with open('file_with_multiple_xmldocuments') as fileobj:
    for xml in xml_documents(fileobj):
        tree = ElementTree.fromstring(xml)