Create XML file with python by iterating over lists -


i trying xml file looks can import moodle gradebook:

<results>   <result>     <student>1</student>     <assignment>100</assignment>     <score>0</score>   </result>   <result>     <student>1</student>     <assignment>101</assignment>     <score>4</score>   </result>   <result>     <student>1</student>     <assignment>102</assignment>     <score>10</score>   </result>   <result>     <student>2</student>     <assignment>100</assignment>     <score>0</score>   </result>   <result>     <student>2</student>     <assignment>101</assignment>     <score>4</score>   </result>   <result>     <student>2</student>     <assignment>102</assignment>     <score>10</score>   </result> </results> 

i have tried write code in python, , after poring on documentation, best can come is:

import xml.etree.celementtree et  students = [1,2] assignments=[100,101,102] scores=[0,4,10] results = et.element("results") result = et.subelement(results,"result") student = et.subelement(result,"student") assignment = et.subelement(result,"assignment") score = et.subelement(result,"score")  s in students:         in range(len(assignments)):         student.text = str(s)         assignment.text = str(assignments[a])         score.text = str(scores[a])         results.append(result) tree = et.elementtree(results) tree.write('test.xml') 

this gives me want, last entry seems overwrite previous entries shown:

<results>   <result>     <student>2</student>     <assignment>102</assignment>     <score>10</score>   </result>   <result>     <student>2</student>     <assignment>102</assignment>     <score>10</score>   </result>   <result>     <student>2</student>     <assignment>102</assignment>     <score>10</score>   </result>   <result>     <student>2</student>     <assignment>102</assignment>     <score>10</score>   </result>   <result>     <student>2</student>     <assignment>102</assignment>     <score>10</score>   </result>   <result>     <student>2</student>     <assignment>102</assignment>     <score>10</score>   </result>   <result>     <student>2</student>     <assignment>102</assignment>     <score>10</score>   </result> </results> 

i have tried find solution, seems of questions address writing xml file distinct elements. can't figure out how use same element tag assign distinct values each one.

you need 2 things:

  • move lines eli suggested loop.
  • remove line: results.append(result) loop. subelement factory takes first argument parent element (as know) , appends newly created instance parent. therefore don't need append again (you won't error, different set of results ones specified).

you loop should like:

for s in students:         in range(len(assignments)):          result = et.subelement(results,"result")         student = et.subelement(result,"student")         assignment = et.subelement(result,"assignment")         score = et.subelement(result,"score")          student.text = str(s)         assignment.text = str(assignments[a])         score.text = str(scores[a]) 

Comments

Popular posts from this blog

python - How to create a legend for 3D bar in matplotlib? -

java - Multi-Label Document Classification -

php - Dynamic url re-writing using htaccess -