<p>希望这有帮助。它迭代每个fueltanklist,从中获取一个坦克列表,检索其值并删除它们。一旦我们有了这些值并对其进行了操作,我们会将带有过程值的新油箱添加到燃油箱列表中。在</p>
<pre><code>import lxml.etree as le
xml = """<EnterpriseDocument><FuelTankList><Tank fuelItem="Petrol" Sales="1000" />
<Tank fuelItem="Diesel" Sales="2000" />
<Tank fuelItem="Diesel" Sales="3000" />
</FuelTankList>
</EnterpriseDocument>"""
root = le.fromstring(xml)
#get all the fueltanklists from the file
fueltanklist = root.xpath('//FuelTankList')
for fuellist in fueltanklist:
tankdict={}
#get all the tanks in the current fueltanklist
tanks = fuellist.xpath('child::Tank')
for tank in tanks:
fuelitem = tank.attrib['fuelItem']
sales = tank.attrib['Sales']
if fuelitem in tankdict:
tankdict[fuelitem] += int(sales)
else:
tankdict[fuelitem] = int(sales)
#Once we have retrieved the value of the current tank, delete it from its parent
tank.getparent().remove(tank)
for key, value in tankdict.items():
#Create and add tanks with new values to its parent
newtank = le.Element("Tank", fuelItem=str(key), netSalesQty=str(value))
fuellist.append(newtank)
#Store the entire xml in a new string
newxml = le.tostring(root)
</code></pre>