python - 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 中做到这一点?
解决方案
.//*[@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>
推荐阅读
- mariadb - 为什么mariadb中这两个select值的结果不一样?
- microsoft-teams - 用户登录团队时如何直接从 Microsoft Teams 获取令牌
- python - 如何识别公共假期
- python - Google Speech Recognition API 输出错误,不确定为什么会发生
- laravel-5.8 - 如何在laravel登录刀片中加密用户名和密码
- reactjs - 加载一个svg文件而不修改webpack中的react
- flutter - 如何使用多提供商更改主题?
- excel - 如何正确转置?
- firebase - 如何通过 UID 从 Firebase 访问用户?
- azure - 使用数组中的元素加入流分析