I need to traverse the XML tree to add sub element when the value is less than 5.
For example, this XML can be modified into
this XML.
How can I do that with Python's ElementTree?
解决方案
You probably made a typo because in the example, an error element is appended as the child of an element whose value is 10, which is not less than 5. But I think this is the idea:
#!/usr/bin/env python
from xml.etree.ElementTree import fromstring, ElementTree, Element
def validate_node(elem):
for child in elem.getchildren():
validate_node(child)
value = child.attrib.get('value', '')
if not value.isdigit() or int(value) < 5:
child.append(Element('D', {'name': 'error'}))
if __name__ == '__main__':
import sys
xml = sys.stdin.read() # read XML from standard input
root = fromstring(xml) # parse into XML element tree
validate_node(root)
ElementTree(root).write(sys.stdout, encoding='utf-8')
# write resulting XML to standard output
Given this input:
This is is the output: