【问题标题】:Create XML file with python by iterating over lists通过迭代列表使用 python 创建 XML 文件
【发布时间】:2013-05-22 00:14:35
【问题描述】:

我正在尝试获取一个看起来像这样的 xml 文件,以便我可以将它导入到 moodle 成绩簿中:

<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>

我尝试用python编写一些代码,在仔细阅读文档后,我能想到的最好的方法是:

import xml.etree.cElementTree as 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")

for s in students:    
    for a 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')

这几乎给了我我想要的,但最后一个条目似乎覆盖了所有以前的条目,如图所示:

<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>

我试图找到一个解决方案,但似乎大多数问题只涉及编写具有不同元素的 xml 文件。我想不通的是如何使用相同的元素标签,但要为每个标签分配不同的值。

【问题讨论】:

    标签: python xml moodle


    【解决方案1】:

    你需要做两件事:

    • 将建议的Eli 行移到for 循环中。
    • 从 for 循环中删除行:results.append(result)SubElement 工厂将父元素作为其第一个参数 (如您所知)并将新创建的实例 追加 父母。因此你不需要再次附加它(你不会得到 任何错误,但你会得到一组不同的结果 您指定)。

    你的循环应该是这样的:

    for s in students:    
        for a 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])
    

    【讨论】:

    • 谢谢!这产生了我所希望的确切结果。
    【解决方案2】:

    你需要移动这些行

    result = ET.SubElement(results,"result")
    student = ET.SubElement(result,"student")
    assignment = ET.SubElement(result,"assignment")
    score = ET.SubElement(result,"score")
    

    for 循环内。否则你只是一遍又一遍地添加相同的result

    【讨论】:

      猜你喜欢
      • 2015-09-08
      • 2017-03-25
      • 1970-01-01
      • 1970-01-01
      • 2015-03-07
      • 1970-01-01
      • 2015-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多