python - 如何更新 xml 元素 value?

我正在尝试从 xml 文件更新 <Bytes> 标记的 value,然后将其保存到新的 output.xml 文件中。我正在写,但我不知道为什么它不工作。xml 文件很大,超过 20000 行,在 <OLDDATA><NEWDATA> 标记之间有数据。我只需要更新 <NEWDATA> 标记之间的数据。另请注意,所有标签中的 value 都是字符串数据类型。下面是我的 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')

回答1

类似下面的东西

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>

相似文章

perl - cpan 模块安装失败,没有缺少先决条件

只是试图安装一个CPAN模块,似乎没有缺少任何先决条件,并且似乎找不到任何指向我需要做些什么来解决这个问题。有人可以理解问题可能是什么吗?除非我绝对确定它可能只是测试的问题,否则我宁愿不强制安装。我查...

php - PHP 导出到 XML 文件时缺少数据

我正在尝试将一些数据从数据库导出到XML文件,然后将文件发送到浏览器(可下载),我现在可以下载该文件,但有些数据丢失了!这是存在问题的代码部分:<?phpinclude('session.php');...