如何像我在数据库中一样过滤xml字符串

时间:2015-08-20 07:04:17

标签: python xml django string filter

我只想显示parent_task_id == 0

的数据
self.task_xml = """
 <?xml version="1.0" encoding="utf-8"?>
<django-objects version="1.0">
    <object model="task.task" pk="31">
        <field name="name" type="CharField">New Task</field>
        <field name="parent_task_id" type="IntegerField">0</field>
    </object>
    <object model="task.task" pk="32">
        <field name="name" type="CharField">New Task</field>
        <field name="parent_task_id" type="IntegerField">0</field>
    </object>
    <object model="task.task" pk="33">
        <field name="name" type="CharField">New Task</field>
        <field name="parent_task_id" type="IntegerField">31</field>
    </object>
    <object model="task.task" pk="34">
        <field name="name" type="CharField">New Task</field>
        <field name="parent_task_id" type="IntegerField">31</field>
    </object>
</django-objects>
"""

self.xmlData = ET.fromstring(self.task_xml)

self.xmlList = []
for obj in self.xmlData.iter("object"):
    self.xmlList.append({'id': obj.find("object[@name='pk']").text,
                'name': obj.find("field[@name='name']").text,
                'parent_task_id': obj.find("field[@name='parent_task_id']").text,
                }

如果我使用数据库

,我想做一些与模型有关的事情
Task.objects.filter(parent_task_id=0)

但这次我使用的是xml字符串,它有什么功能吗?

1 个答案:

答案 0 :(得分:1)

同样,您获取id的方法有误,您需要从pk节点获取属性object,而不是 - obj.find("object[@name='pk']").text - 正如已经回答的那样 - Translate xml string to html, I received error messages

然后,对于当前所需的信息,只需获取信息 - obj.find("field[@name='parent_task_id']").text,并检查它是否等于0,并且仅当它等于0时,将数据附加到xmlList

示例 -

self.xmlList = []
for obj in self.xmlData.iter("object"):
    parent_task_id = obj.find("field[@name='parent_task_id']").text
    if parent_task_id == '0':
        self.xmlList.append({'id': obj.get('pk'),
                'name': obj.find("field[@name='name']").text,
                'parent_task_id': ,
                }