python xml更改标记值(如果它们有spec子级)
我有50MB的xml文件,我想通过python更改specyfic标记值,当它们有specyfic值的子标记时。我尝试使用xml.etree.ElementTree和任何stockoverflow用户建议,但我仍然没有结果。你能给我一些提示吗python xml更改标记值(如果它们有spec子级),python,xml,Python,Xml,我有50MB的xml文件,我想通过python更改specyfic标记值,当它们有specyfic值的子标记时。我尝试使用xml.etree.ElementTree和任何stockoverflow用户建议,但我仍然没有结果。你能给我一些提示吗 <parent> <child1>321</child1> <par_child2> <par_par_child1> <par_par__child1_chil
<parent>
<child1>321</child1>
<par_child2>
<par_par_child1>
<par_par__child1_child>XYZ</par_par__child1_child>
...
</par_par_child1>
</par_child2>
</parent>
321
XYZ
...
现在呢
if <par_par__child1_child> = 'XYZ':
replace <child1> tag value to '123'
if='XYZ':
将标记值替换为“123”
如果您认为python不适合此任务,我应该使用什么?我会非常优雅的为任何帮助
for ppchild in root.iter('par_par_child1_child'):
if ppchild.text == 'XYZ':
ppchild.text = '123'
root
通过查询您的树:tree.getroot()
“XYZ”是par_par_child 1_child
元素的文本
Python非常适合这项任务,但在使用它之前,您必须先学习一下,即使它比其他语言更容易。EDIT
澄清后,使用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'))
从lxml导入etree
xml=”“”
321
XYZ
...
"""
tree=etree.fromstring(xml)
对于tree.iter('par_child2')中的元素:
if元素.find('par_par_child1/par_par_child1_child')。text='XYZ':
#再次上下遍历,我更喜欢这个而不是索引
元素。查找('../child1')。文本='123'
打印(etree.tostring(tree,pretty\u print=True)。解码('utf-8'))
输出
123
XYZ
...
.
您的意思是添加一个类似
的属性吗?我仍在尝试更改您的示例:)我想将321更改为123测试我的编辑,应该适用于您:)