【问题标题】:How to delete all specific xml element using Element Tree?如何使用元素树删除所有特定的 xml 元素?
【发布时间】:2021-06-18 20:02:58
【问题描述】:

我需要删除文件中所有出现的特定 XML 元素。

但我尝试了很多次,但我无法使用元素树python删除。

在下面的 XML 内容中,我需要删除所有 <decade> 元素。

<?xml version='1.0' encoding='utf8'?>
<page>
    <genre>
        <decade>
            <movie>
                <rating>PG</rating>
            </movie>
        </decade>
        <decade>
            <movie>
               <rating>PG-13</rating>
            </movie>
        </decade>
        <name>DVD-2001</name>
    </genre>
    <genre>
        <decade>
            <movie>
                <rating>R</rating>
            </movie>
        </decade>
        <name>DVD-1989</name>
    </genre>
</page>

谁能帮我删除上述文本中所有出现的元素。

【问题讨论】:

  • Stackoverflow 不是免费的编码服务,也不打算取代现有的教程或文档。您应该发送honest attempt at the solution,然后然后在必要时询问有关它的具体问题。

标签: python python-3.x elementtree


【解决方案1】:

请注意,下面的代码还会删除 decade 元素的所有子节点。

from xml.etree import ElementTree
from io import StringIO, BytesIO

data = '''\
<?xml version="1.0" encoding="UTF-8"?>
<page>
    <genre>
        <decade>
            <movie>
                <rating>PG</rating>
            </movie>
        </decade>
        <decade>
            <movie>
               <rating>PG-13</rating>
            </movie>
        </decade>
        <name>DVD-2001</name>
    </genre>
    <genre>
        <decade>
            <movie>
                <rating>R</rating>
            </movie>
        </decade>
        <name>DVD-1989</name>
    </genre>
</page>
'''

f = StringIO(data)
tree = ElementTree.parse(f)

for g in tree.iter('genre'):
    for d in g.findall('decade'):
        g.remove(d)

f = BytesIO()
tree.write(f, encoding='UTF-8', xml_declaration=True)

print(f.getvalue().decode('UTF-8'))

输出

<?xml version='1.0' encoding='UTF-8'?>
<page>
    <genre>
        <name>DVD-2001</name>
    </genre>
    <genre>
        <name>DVD-1989</name>
    </genre>
</page>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多