使用Python按带有属性名称的路径搜索元素,并替换xml中的值



如何使用Python为元素提供具有属性值的完整路径并替换xml中的元素值

例如:我有这样的 xml 文件:

<bw>
<bwprocesses>
<bwprocess name="Business_Processes/Source_Processes/Receive Batch Message.process">
<starter>Receive Batch Message</starter>
</bwprocess>
<bwprocess name="Business_Processes/Source_Processes/Type Subscriber.process">
<starter>Receive Trade Message</starter>
</bwprocess>
<bwprocess name="Business_Processes/Source_Processes/Message Router.process">
<starter>Message JMS Queue Receiver</starter>
</bwprocess>
</bwprocesses>
</bw>

并希望通过提供需要更新的完整元素路径(带有属性值(来更新 XML。

输入 : bwprocesses/bwprocess [Business_Processes/Source_Processes/Receive Batch Message.process]/starter = new massage(新值应更新以代替.xml中的"接收批处理消息"(

我尝试使用xml.etree.ElementTree搜索示例,但找不到任何有用的信息。尝试在下面的代码中搜索元素,但出现错误。请帮忙。

import xml.etree.ElementTree as ET
tree = ET.parse('a.xml')
root = tree.getroot()
for e in root.findall('bwprocesses/bwprocess[@name='Business_Processes/Source_Processes/Receive Batch Message.process']/starter'):
print e.text

见下文

import xml.etree.ElementTree as ET
xml = '''<bw>
<bwprocesses>
<bwprocess name="Business_Processes/Source_Processes/Receive Batch Message.process">
<starter>Receive Batch Message</starter>
</bwprocess>
<bwprocess name="Business_Processes/Source_Processes/Type Subscriber.process">
<starter>Receive Trade Message</starter>
</bwprocess>
<bwprocess name="Business_Processes/Source_Processes/Message Router.process">
<starter>Message JMS Queue Receiver</starter>
</bwprocess>
</bwprocesses>
</bw>'''
root = ET.fromstring(xml)
for e in root.findall("bwprocesses/bwprocess[@name='Business_Processes/Source_Processes/Receive Batch Message.process']/starter"):
print('Before: {}'.format(e.text))
e.text = 'Any text you want'
for e in root.findall("bwprocesses/bwprocess[@name='Business_Processes/Source_Processes/Receive Batch Message.process']/starter"):
print('After: {}'.format(e.text))

最新更新