![](/img/trans.png)
[英]Insert an xml file in a node of another xml file using Python ElementTree
[英]Insert a node for an element in XML with Python/ElementTree
當值小於5時,我需要遍歷XML樹以添加子元素。例如,可以將此XML修改為
<?xml version="1.0" encoding="UTF-8"?>
<A value="45">
<B value="30">
<C value="10"/>
<C value ="20"/>
</B>
<B value="15">
<C value = "5" />
<C value = "10" />
</B>
</A>
這個XML。
<?xml version="1.0" encoding="UTF-8"?>
<A value="45">
<B value="30">
<C value="10"/>
<C value ="20"/>
</B>
<B value="15">
<C value = "5"><D name="error"/></C>
<C value = "10" />
</B>
</A>
我怎么能用Python的ElementTree做到這一點?
你可能犯了一個拼寫錯誤,因為在這個例子中,一個錯誤元素被追加為一個元素的子元素,它的值是10,不小於5.但我認為這是個主意:
#!/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
鑒於此輸入:
<?xml version="1.0" encoding="UTF-8"?>
<A value="45">
<B value="30">
<C value="1"/>
<C value="20"/>
</B>
<B value="15">
<C value="5" />
<C value="10" />
<C value="foo" />
</B>
</A>
這是輸出:
<A value="45">
<B value="30">
<C value="1"><D name="error" /></C>
<C value="20" />
</B>
<B value="15">
<C value="5" />
<C value="10" />
<C value="foo"><D name="error" /></C>
</B>
</A>
ElementTree的iter (或Python <2.7的getiterator )將以遞歸方式返回樹中的所有節點,然后只測試您的條件並創建SubElement :
from xml.etree import ElementTree as ET
tree = ET.parse(input)
for e in tree.getiterator():
if int(e.get('value')) < 5:
ET.SubElement(e,'D',dict(name='error'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.