Python 基于属性键的xml数据写入

Python 基于属性键的xml数据写入,python,xml,Python,Xml,我有一个如下所示的xml文件,我想从我的设备读取数据,并使用python脚本将数据写入特定名称的“value”列中 <TopoDefs> <Device Name="SNB" LogicalType="CORE" IdCode="0x03886A21" Mask="0xf0000000"> <Variable name="A0" value="0x52001321" type="GREEN" /> <Variable name="A1" value

我有一个如下所示的xml文件,我想从我的设备读取数据,并使用python脚本将数据写入特定名称的“value”列中

<TopoDefs>   
<Device Name="SNB" LogicalType="CORE" IdCode="0x03886A21" Mask="0xf0000000">
<Variable name="A0" value="0x52001321" type="GREEN" />
<Variable name="A1" value="0x51001321" type="GREEN" />
<Variable name="A2" value="0x03001321" type="GREEN" />
<Variable name="A3" value="0x14001321" type="GREEN" />
<Variable name="B0" value="0x5A001321" type="BLUE" />
<Variable name="B1" value="0x51001321" type="BLUE" />
<Variable name="B2" value="0x04001321" type="BLUE" />
<Variable name="B3" value="0x05001321" type="BLUE" />
</Device>
</TopoDefs>

我可以问一下如何指向变量A0以在“value”属性上写入新数据吗? find、findall、iterfind和itertext之间的区别是什么?

使用,我认为这是完成任务的最佳工具:

from lxml import etree as ET


>>> root = ET.fromstring('<TopoDefs><Device Name="SNB" LogicalType="CORE" IdCode="0x03886A21" Mask="0xf0000000"><Variable name="A0" value="0x52001321" type="GREEN" /><Variable name="A1" value="0x51001321" type="GREEN" /><Variable name="A2" value="0x03001321" type="GREEN" /><Variable name="A3" value="0x14001321" type="GREEN" /><Variable name="B0" value="0x5A001321" type="BLUE" /><Variable name="B1" value="0x51001321" type="BLUE" /><Variable name="B2" value="0x04001321" type="BLUE" /><Variable name="B3" value="0x05001321" type="BLUE" /></Device></TopoDefs>')
>>> root.xpath('.//Variable[@name="A0"]')[0].attrib['value']='test'
>>> print ET.tostring(root,pretty_print=True)
<TopoDefs>
  <Device Name="SNB" LogicalType="CORE" IdCode="0x03886A21" Mask="0xf0000000">
    <Variable name="A0" value="test" type="GREEN"/>
    <Variable name="A1" value="0x51001321" type="GREEN"/>
    <Variable name="A2" value="0x03001321" type="GREEN"/>
    <Variable name="A3" value="0x14001321" type="GREEN"/>
    <Variable name="B0" value="0x5A001321" type="BLUE"/>
    <Variable name="B1" value="0x51001321" type="BLUE"/>
    <Variable name="B2" value="0x04001321" type="BLUE"/>
    <Variable name="B3" value="0x05001321" type="BLUE"/>
  </Device>
</TopoDefs>

对不起,我是python新手,我可以知道如何在Windows中安装lxml库吗,这将引导您完成整个过程。有适用于windows的二进制软件包,我建议您选择其中一个。
>>> for i in root.xpath('.//Variable'):
...     i.attrib['value']='CHANGE'
...     
>>> print ET.tostring(root,pretty_print=True)
<TopoDefs>
  <Device Name="SNB" LogicalType="CORE" IdCode="0x03886A21" Mask="0xf0000000">
    <Variable name="A0" value="CHANGE" type="GREEN"/>
    <Variable name="A1" value="CHANGE" type="GREEN"/>
    <Variable name="A2" value="CHANGE" type="GREEN"/>
    <Variable name="A3" value="CHANGE" type="GREEN"/>
    <Variable name="B0" value="CHANGE" type="BLUE"/>
    <Variable name="B1" value="CHANGE" type="BLUE"/>
    <Variable name="B2" value="CHANGE" type="BLUE"/>
    <Variable name="B3" value="CHANGE" type="BLUE"/>
  </Device>
</TopoDefs>