Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python xml更改标记值(如果它们有spec子级)_Python_Xml - Fatal编程技术网

python xml更改标记值(如果它们有spec子级)

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

我有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>

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测试我的编辑,应该适用于您:)