首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python的`xml.etree.ElementTree.iterparse`拼接XML节

用Python的`xml.etree.ElementTree.iterparse`拼接XML节
EN

Stack Overflow用户
提问于 2017-11-15 18:41:50
回答 1查看 84关注 0票数 0

我想使用xml.etree.ElementTree.iterparse()来抓取XML文件的某些部分。该文件有60 1B和1B行,因此我不想将其全部加载到内存中。我没有看到一种在xml库中输出整个XML子部分的方法。我认识到iterparse是迭代的,可能到目前为止还只是向前看。我该怎么做呢?

代码语言:javascript
复制
from xml.etree.ElementTree import iterparse

context = iterparse("file.xml", events=("start", "end"))

for event, elem in context:
    if event == 'start':
        if elem.tag == 'page':
            # Splice out this subset of the XML, including tags
            # Or, better, splice it if `<title>` includes "Foo".
    else:
        elem.clear()

XML大致如下所示:

代码语言:javascript
复制
<siteinfo>
    <page>
        <title>Foo</title>
            <text>Bar</text>
    </page>
    <page>
        <title>NotFoo</title>
        <text>NotBar</text>
    </page>
</siteinfo>
EN

回答 1

Stack Overflow用户

发布于 2017-11-16 17:42:15

我尝试了一些东西,它并不是你所期望的输出,只是分享它是否对你有用

代码语言:javascript
复制
path='D:\data.xml'
from xml.etree import ElementTree as Et

context = Et.iterparse(path,events=("start", "end"))
root = None
for event, elem in context:
    if event=='end' or event=='start':
        if elem.text=='Foo':
            elem.clear()
root=elem
with open('d:\output.xml', 'wb') as file:
    Et.ElementTree(root).write(file, encoding='utf-8', xml_declaration=True)

输出文件:

代码语言:javascript
复制
<?xml version='1.0' encoding='utf-8'?>
<siteinfo>
    <page>
        **#some how this <title /> remains**
        ***<title />***
        <text>Bar</text>
    </page>
    <page>
        <title>NotFoo</title>
        <text>NotBar</text>
    </page>
</siteinfo>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47305272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档