pythonxml更改标签值,如果它们有spec子级

2024-09-25 00:23:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有50MB的xml文件,我想改变specyfic标签值,当他们有子标签specyfic值由python。我尝试使用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不适合这个任务,我应该使用什么?我将非常优雅的任何帮助


Tags: 文件用户child标签xmlparentetreeelementtree
2条回答
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非常适合这个任务,但是在使用它之前必须先学习一下,即使它比其他语言更容易

编辑

澄清之后,使用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'))

输出

相关问题 更多 >