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
  • try dicttoxml Commented Nov 6, 2020 at 12:06

1 Answer 1

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>
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.