1

I am trying to read from a list and add the values as new nodes into an XML in Python

list = ['163','164','165']

and after appending list values into the node trackingnumbers,

The xml should looks like this :

<?xml version="1.0" encoding="UTF-8"?>
<trackingrequest>
<user>TAIL</user>
<password>20</password>
<trackingnumbers>
    <trackingnumber>163</trackingnumber>
    <trackingnumber>164</trackingnumber>
    <trackingnumber>165</trackingnumber>
</trackingnumbers>
</trackingrequest>

I have got it this far but i am stuck at creating dynamic variables inside a loop, which creates new nodes inside trackingnumbers

def GenerateXML():

    root = ET.Element("trackingrequest")
    m1 = ET.Element("user")
    root.append(m1)
    m1.text = 'TAIL'

    m2 = ET.Element("password")
    root.append(m2)
    m2.text = '20'

    m3 = ET.Element("trackingnumbers")
    root.append(m3)
    d = {}

    for i in range(list):
       d["trackingid_{0}".format(i)] = ET.SubElement(m3, "trackingnumber")
       d['trackingid_1'].text = i*2

    tree = ET.ElementTree(root)

1 Answers1

1

The idea is to find trackingnumbers and add the required sub elements

import xml.etree.ElementTree as ET

lst = ['163', '164', '165']

xml = '''<?xml version="1.0" encoding="UTF-8"?>
<trackingrequest>
<user>TAIL</user>
<password>20</password>
<trackingnumbers>

</trackingnumbers>
</trackingrequest>'''

root = ET.fromstring(xml)
tracking_numbers = root.find('.//trackingnumbers')
for num in lst:
    tn = ET.SubElement(tracking_numbers, 'trackingnumber')
    tn.text = num
ET.dump(root)

output

<?xml version="1.0" encoding="UTF-8"?>
<trackingrequest>
   <user>TAIL</user>
   <password>20</password>
   <trackingnumbers>
      <trackingnumber>163</trackingnumber>
      <trackingnumber>164</trackingnumber>
      <trackingnumber>165</trackingnumber>
   </trackingnumbers>
</trackingrequest>
balderman
  • 22,927
  • 7
  • 34
  • 52