我有类似结构的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中实现呢?
答案 0 :(得分:1)
使用XPath .//*[@ID]
选择元素应该相当容易。
下面是一个示例,将所有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>