如何更新xml元素值?



我试图从xml文件更新<Bytes>标记的值,然后将其保存到新的output.xml文件。我在写,但我不知道为什么它不起作用。xml文件是巨大的,超过20000行,在<OLDDATA><NEWDATA>标记之间有数据。我只是想更新<NEWDATA>标签之间的数据。还要注意,所有标记的值都是字符串数据类型。下面是我的xml数据和代码。

#this is my xml data
...
<NEWData>
<SlNo>106</SlNo>
<Parameter>Cycle Time</Parameter>
<Bytes>3</Bytes>
<MinValue>2</MinValue>
</NEWData>
<OLDData>
<SlNo>107</SlNo>
<Parameter>Cycle Time</Parameter>
<Bytes>3</Bytes>
<MinValue>2</MinValue>
</OLDData>
<NEWData>
<SlNo>108</SlNo>
<Parameter>Cycle Time</Parameter>
<Bytes>7</Bytes>
<MinValue>1</MinValue>
</NEWData>
...
#this is my code
import xml.etree.ElementTree as ET
tree = ET.parse(complet_path)
root = tree.getroot()
ln = len(root)
for i in range(ln):
newDataTag = root[i].tag
if newDataTag=='NEWDATA':
parameter=root[i][1].text
bytes = root[i][4].text
minValue = root[i][11].text
if bytes=="3":
bytes ="5"
minValue ="1"
bytes.set('updated', 'yes')
if bytes=="7":
bytes ="4"
minValue ="0"
bytes.set('updated', 'yes')
tree.write('output.xml')

类似下面的内容

import xml.etree.ElementTree as ET
xml = '''<r>
<NEWData>
<SlNo>106</SlNo>
<Parameter>Cycle Time</Parameter>
<Bytes>3</Bytes>
<MinValue>2</MinValue>
</NEWData>
<NEWData>
<SlNo>107</SlNo>
<Parameter></Parameter>
<Bytes>7</Bytes>
<MinValue>1</MinValue>
</NEWData>
<NEWData>
<SlNo>108</SlNo>
<Parameter></Parameter>
<Bytes>111</Bytes>
<MinValue>1</MinValue>
</NEWData>
</r>'''
LOOK_UP = {'3':('5','1'),'7': ('4','0')}
root = ET.fromstring(xml)
for nd in root.findall('.//NEWData'):
bytes = nd.find('Bytes')
min_value = nd.find('MinValue')
_bytes,_min_value = LOOK_UP.get(bytes.text,('0','0'))
bytes.text = _bytes
min_value.text = _min_value
ET.dump(root)

输出
<r>
<NEWData>
<SlNo>106</SlNo>
<Parameter>Cycle Time</Parameter>
<Bytes>5</Bytes>
<MinValue>1</MinValue>
</NEWData>
<NEWData>
<SlNo>107</SlNo>
<Parameter />
<Bytes>4</Bytes>
<MinValue>0</MinValue>
</NEWData>
<NEWData>
<SlNo>108</SlNo>
<Parameter />
<Bytes>0</Bytes>
<MinValue>0</MinValue>
</NEWData>
</r>

最新更新