我有50MB的xml文件,当我们有python的specyfic值的子标签时,我想更改specyfic标签值。我试图使用xml.etree.ElementTree和任何stockoverflow用户建议,但我还没有结果。你能给我一些提示吗?
<parent>
<child1>321</child1>
<par_child2>
<par_par_child1>
<par_par__child1_child>XYZ</par_par__child1_child>
...
</par_par_child1>
</par_child2>
</parent>
现在
if <par_par__child1_child> = 'XYZ':
replace <child1> tag value to '123'
如果您认为python不是最适合此任务的,那么我应该使用什么?我会非常优雅的任何帮助。
答案 0 :(得分:1)
修改强>
在您澄清之后,使用lxml
工作代码:
from lxml import etree
xml = """<parent>
<child1>321</child1>
<par_child2>
<par_par_child1>
<par_par__child1_child>XYZ</par_par__child1_child>
...
</par_par_child1>
</par_child2>
</parent>"""
tree = etree.fromstring(xml)
for element in tree.iter('par_child2'):
if element.find('par_par_child1/par_par__child1_child').text == 'XYZ':
# Traverse up and back down again, I prefer this over indexes
element.find('../child1').text = '123'
print(etree.tostring(tree, pretty_print=True).decode('utf-8'))
输出
<parent>
<child1>123</child1>
<par_child2>
<par_par_child1>
<par_par__child1_child>XYZ</par_par__child1_child>
...
</par_par_child1>.
</par_child2>
</parent>
&#13;
答案 1 :(得分:0)
for ppchild in root.iter('par_par_child1_child'):
if ppchild.text == 'XYZ':
ppchild.text = '123'
通过查询您的树获得 root
:tree.getroot()
'XYZ'是par_par_child1_child
元素的文本
Python非常适合这项任务,但在使用它之前你必须先学习它,即使它比其他语言更容易。