如果python xml具有spec子级,则更改标记值

时间:2017-12-19 09:59:18

标签: python xml

我有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不是最适合此任务的,那么我应该使用什么?我会非常优雅的任何帮助。

2 个答案:

答案 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'))

输出

&#13;
&#13;
<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;
&#13;
&#13;

答案 1 :(得分:0)

for ppchild in root.iter('par_par_child1_child'):
    if ppchild.text == 'XYZ':
        ppchild.text = '123'
通过查询您的树获得

roottree.getroot()

'XYZ'是par_par_child1_child元素的文本

Python非常适合这项任务,但在使用它之前你必须先学习它,即使它比其他语言更容易。