Imen
Imen

Reputation: 43

create parents for existing children in python

I am new with python and I am trying to modify an xml file below:

<component xmlns:xsi="http://www.w3.orgr">
  <memoryMaps>
    <memoryMap>
      <name>name</name>
      <description>description</description>
      <peripheral>
        <name>periph</name>
        <description>description</description>
        <baseAddress>0x0</baseAddress>
        <range>0x8</range>
        <width>32</width>
        <register>
          <name>reg1</name>
          <displayName>reg1</displayName>
          <addressOffset>0x0</addressOffset>
          <size>32</size>
          <access>read-write</access>
          <reset>
            <value>0x00000002</value>
            <mask>0xFFFFFFFF</mask>
          </reset>
          <field>
            ...................
          </field>
          <field>
            ...................
          </field>
          </register>
          <register>
              .................
          </register>
          <register>
             ..................
          </register>
       
      </peripheral>
    </memoryMap>
  </memoryMaps>
</component>

I can parse the xml file with success,and do some small modifications to remove elements, but now I need to create 2 parents inside:

The result should look as follow:

<component xmlns:xsi="http://www.w3.orgr">
  <memoryMaps>
    <memoryMap>
      <name>name</name>
      <description>description</description>
      <peripheral>
        <name>periph</name>
        <description>description</description>
        <baseAddress>0x0</baseAddress>
        <range>0x8</range>
        <width>32</width>
        <registers>
         <register>
          <name>reg1</name>
          <displayName>reg1</displayName>
          <addressOffset>0x0</addressOffset>
          <size>32</size>
          <access>read-write</access>
          <reset>
            <value>0x00000002</value>
            <mask>0xFFFFFFFF</mask>
          </reset>
          <fields>
           <field>
            ...................
          </field>
          <field>
            ...................
           </field>
           <fields>
          </register>
          <register>
              .................
          </register>
          <register>
             ..................
          </register>
       </registers>
      </peripheral>
    </memoryMap>
  </memoryMaps>
</component>

Can you advice what function or approach I could follow in this case? Thank you

Upvotes: 1

Views: 52

Answers (1)

Nitul
Nitul

Reputation: 379

The following code snippet should do the trick. I have made use of the xml.etree.ElementTree module which is provided as part of the Python Standard Library.

import xml.etree.ElementTree as et


def main():
    # Assuming the sample xml is in the file 'input.xml'
    tree = et.parse('input.xml')
    root = tree.getroot()

    for register_parent in root.findall('.//register/..'):
        registers = et.SubElement(register_parent, 'registers')
        for register in register_parent.findall('.//register'):
            fields = et.SubElement(register, 'fields')
            for field in register.findall('.//field'):
                fields.append(field)
                register.remove(field)
            registers.append(register)
            register_parent.remove(register)

    # Verify the result
    et.dump(root)


if __name__ == '__main__':
    main()

Upvotes: 2

Related Questions