在python中更新XML标记值

2024-10-03 19:32:25 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面的XML中,我只想解析它并在它找到<Name>EveIapsGrdMes</Name>时更新该值,然后在下一个节点中,即<Value>12345</Value>,只有Value应该更新为12345。有人能帮我弄明白怎么处理吗

<?xml version='1.0' encoding='UTF-8'?>
<EDS>
    <Vector>
        <Number>1</Number>
        <ScalarSection>
            <Scalar>
                <Name>Patching_Path</Name>
                <Value>DO FlashManager.cmm "--patch --deviceName ALL"</Value>
                <Comment />
            </Scalar>
            <Scalar>
                <Name>EveIapsGrdMes</Name>
                <Value>A</Value>
                <Comment>EveIapsGrdMes Sensor Value</Comment>
            </Scalar>
            <Scalar>
                <Name>EveIapsOverTemp</Name>
                <Value>Icsp_Dem_Deb_LfEve_UNIONFIED.Icsp_Dem_Deb_LvErr_15[31]</Value>
                <Comment>EveIapsOverTemp Sensor Value</Comment>
            </Scalar>
            <Scalar>
                <Name>EveIapsUnderTemp</Name>
                <Value>Icsp_Dem_Deb_LfEve_UNIONFIED.Icsp_Dem_Deb_LvErr_15[32]</Value>
                <Comment>EveIapsUnderTemp Sensor Value</Comment>
            </Scalar>
            <EveDtsUnderTemp />
            <EveDtsOverTemp />
        </ScalarSection>
        <OneDMapSection />
        <TwoDMapSection />
    </Vector>
</EDS>

这是我的密码。我可以访问名称标签EveIapsGrdMes,但如何更改下一个Value标签

import xml.etree.ElementTree as ET
 
with open('sys_bswm.xml', encoding="UTF-8") as f:
  tree = ET.parse(f)
  root = tree.getroot()
  for elem in root.getiterator():
      print(elem)
      try:
          if elem.tag=='Name':
              if elem.text == 'EveIapsGrdMes':
                  'Update the next tage Value, i,e <Value>12345</Value>'
              else:
                  'pass'

      except AttributeError:
          'pass' tree.write('sys_bswm.xml',xml_declaration=True,method='xml', encoding="UTF-8")

第一部分已经完成。需要做第二部分。此外,还需要将结果写入新的XML文件中


Tags: nametreevaluecommentdebxmlsensorutf
1条回答
网友
1楼 · 发布于 2024-10-03 19:32:25

下面的代码查找所需的元素并将该值更改为新值

import xml.etree.ElementTree as ET

xml = '''<?xml version='1.0' encoding='UTF-8'?>
<EDS>
    <Vector>
        <Number>1</Number>
        <ScalarSection>
            <Scalar>
                <Name>Patching_Path</Name>
                <Value>DO FlashManager.cmm " patch  deviceName ALL"</Value>
                <Comment />
            </Scalar>
            <Scalar>
                <Name>EveIapsGrdMes</Name>
                <Value>A</Value>
                <Comment>EveIapsGrdMes Sensor Value</Comment>
            </Scalar>
            <Scalar>
                <Name>EveIapsOverTemp</Name>
                <Value>Icsp_Dem_Deb_LfEve_UNIONFIED.Icsp_Dem_Deb_LvErr_15[31]</Value>
                <Comment>EveIapsOverTemp Sensor Value</Comment>
            </Scalar>
            <Scalar>
                <Name>EveIapsUnderTemp</Name>
                <Value>Icsp_Dem_Deb_LfEve_UNIONFIED.Icsp_Dem_Deb_LvErr_15[32]</Value>
                <Comment>EveIapsUnderTemp Sensor Value</Comment>
            </Scalar>
            <EveDtsUnderTemp />
            <EveDtsOverTemp />
        </ScalarSection>
        <OneDMapSection />
        <TwoDMapSection />
    </Vector>
</EDS>'''

root = ET.fromstring(xml)
scalars = root.findall('.//Scalar')
for scalar in scalars:
  name = scalar.find('Name')
  print(name.text)
  if name.text == 'EveIapsGrdMes':
    value = scalar.find('Value')
    value.text = 'The new value you want to have'
ET.dump(root)

输出

<?xml version="1.0" encoding="UTF-8"?>
<EDS>
   <Vector>
      <Number>1</Number>
      <ScalarSection>
         <Scalar>
            <Name>Patching_Path</Name>
            <Value>DO FlashManager.cmm " patch  deviceName ALL"</Value>
            <Comment />
         </Scalar>
         <Scalar>
            <Name>EveIapsGrdMes</Name>
            <Value>The new value you want to have</Value>
            <Comment>EveIapsGrdMes Sensor Value</Comment>
         </Scalar>
         <Scalar>
            <Name>EveIapsOverTemp</Name>
            <Value>Icsp_Dem_Deb_LfEve_UNIONFIED.Icsp_Dem_Deb_LvErr_15[31]</Value>
            <Comment>EveIapsOverTemp Sensor Value</Comment>
         </Scalar>
         <Scalar>
            <Name>EveIapsUnderTemp</Name>
            <Value>Icsp_Dem_Deb_LfEve_UNIONFIED.Icsp_Dem_Deb_LvErr_15[32]</Value>
            <Comment>EveIapsUnderTemp Sensor Value</Comment>
         </Scalar>
         <EveDtsUnderTemp />
         <EveDtsOverTemp />
      </ScalarSection>
      <OneDMapSection />
      <TwoDMapSection />
   </Vector>
</EDS>

相关问题 更多 >