将XML字符串转换为Python列表

4

我是Python的新手。我想在模板中将这个XML字符串显示为列表。

xmlData = """<?xml version="1.0" encoding="utf-8"?> 
<django-objects version="1.0">
<object model="task.task" pk="4">
<field name="name" type="CharField">New Task</field>
<field name="mission_id" type="IntegerField">2</field>
<field name="parent_task_id" type="IntegerField">0</field>
</object>
<object model="task.task" pk="5">
<field name="name" type="CharField">New Task</field>
<field name="mission_id" type="IntegerField">2</field>
<field name="parent_task_id" type="IntegerField">0</field>
</object>
<object model="task.task" pk="6">
<field name="name" type="CharField">New ask</field>
<field name="mission_id" type="IntegerField">2</field>
<field name="parent_task_id" type="IntegerField">0</field>
</object>
<object model="task.task" pk="7">
<field name="name" type="CharField">New Task</field>
<field name="mission_id" type="IntegerField">2</field>
<field name="parent_task_id" type="IntegerField">0</field>
</object></django-objects> """

我只是想把这个显示为一个列表。 我导入cElementTree。

from xml.etree import cElementTree as ET

我也做了以下工作:

xmlList = ET.fromstring(xmlData)

但我不知道如何展示它。我想要展示类似于这样的东西。
print xmlList.name
print xmlList.mission_id
print xmlList.parent_task_id

请帮助我了解此语法的正确写法。

1个回答

0
您可以使用以下代码示例:
from xml.etree import cElementTree as ET
xml = ET.fromstring(xmlData)

for child in xml.iter('field'):
    print child.tag, child.attrib, child.text

迭代所有名为field的XML元素,并将它们的标签、属性和文本值打印到控制台。

查看xml.etree文档以获取更多示例。

Django视图

为了在Django应用程序中将解析的XML数据呈现为视图,您需要viewtemplate

假设您在项目中安装了一个名为app的Django应用程序。

app/views.py

from xml.etree import cElementTree as ET

from django.http import HttpResponse
from django.shortcuts import render
from django.template import Context, loader


def xml_view(request):
    xmlData = """<?xml version="1.0" encoding="utf-8"?> 
    <django-objects version="1.0">
    <object model="task.task" pk="4">
    <field name="name" type="CharField">foo</field>
    <field name="mission_id" type="IntegerField">1</field>
    <field name="parent_task_id" type="IntegerField">20</field>
    </object>
    <object model="task.task" pk="7">
    <field name="name" type="CharField">bar</field>
    <field name="mission_id" type="IntegerField">2</field>
    <field name="parent_task_id" type="IntegerField">10</field>
    </object></django-objects>"""

    xml = ET.fromstring(xmlData)

    fields = []
    for obj in xml.iter("object"):
        fields.append({'name': obj.find("field[@name='name']").text,
                       'mission_id': obj.find("field[@name='mission_id']").text,
                       'parent_task_id': obj.find("field[@name='parent_task_id']").text,
                       })

    t = loader.get_template('your_app/xml_view.html')
    c = Context({'elem_list': fields})
    return HttpResponse(t.render(c))

app/templates/app/xml_view.html

<html lang="en">
  <body>
    <table>
      <tr>
        <th>Name</th>
        <th>Mission ID</th>
        <th>Parent Task ID</th>
      </tr>
      {% for elem in elem_list %}
      <tr>
        <td>{{ elem.name }}</td>
        <td>{{ elem.mission_id }}</td>
        <td>{{ elem.parent_task_id }}</td>
      </tr>
      {% endfor %}
  </body>
</html>

非常感谢...但我仍然无法展示我想要的内容...我想要展示如下表格:<table> <tr> <th>名称 <th>任务ID <th>父任务ID <tr> <td>{{ 名称 }} <td>{{ 任务ID }} <td>{{ 父任务ID }} - James Reid
谢谢Maciej Lach,我会尝试的...非常感谢你的帮助! - James Reid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接