首页 > 解决方案 > python elementtree - 如何在xml中查找具有特定属性的所有元素

问题描述

我有类似结构的xml:

<terms>
    <entry ID="1">
        <language ID="1">en</language>
        <term>user</term>
        <state>text</state>
        <use>text</use>
        <definition ID="1">text</definition>
            <subdefinition ID="1">text</subdefinition>
        <definition-source>text</definition-source>
        <source ID="1">text</source>
        <circle>text</circle>
    </entry>

在这种情况下,父元素和子元素都包含属性 ID。有没有办法,如何从包含属性 ID 的树中查找所有元素并将值更改为 0 或删除它?

我试图用 XPath 来做,但是当层次结构很深并且任何元素都可以具有此属性时,这很困难。另一种方法是将其作为字符串处理,但有没有办法在 ElementTree 中做到这一点?

标签: pythonxmlelementtree

解决方案


.//*[@ID]使用 XPath选择元素应该相当容易。

ID这是一个将所有值更改为0...的示例

XML 输入(test.xml)

<terms>
    <entry ID="1">
        <language ID="1">en</language>
        <term>user</term>
        <state>text</state>
        <use>text</use>
        <definition ID="1">text</definition>
            <subdefinition ID="1">text</subdefinition>
        <definition-source>text</definition-source>
        <source ID="1">text</source>
        <circle>text</circle>
    </entry>
</terms>

Python

import xml.etree.ElementTree as ET

tree = ET.parse("test.xml")

for elem in tree.findall(".//*[@ID]"):
    elem.attrib["ID"] = "0"

ET.dump(tree.getroot())

输出(转储到控制台)

<terms>
    <entry ID="0">
        <language ID="0">en</language>
        <term>user</term>
        <state>text</state>
        <use>text</use>
        <definition ID="0">text</definition>
            <subdefinition ID="0">text</subdefinition>
        <definition-source>text</definition-source>
        <source ID="0">text</source>
        <circle>text</circle>
    </entry>
</terms>

推荐阅读