一个defusedxml版本的python死的简单对象xml映射器
safedexml的Python项目详细描述
dexml:python的一个死的简单对象xml映射器
=============================
让我们面对现实:xml是现代生活的一个事实。我甚至会说,
它擅长做什么。但这并不意味着工作很容易,也不意味着我们必须喜欢它。大多数情况下,xml
只需要让开,让您做一些实际的工作,而不是编写代码来遍历和操作另一个dom。
dexml模块在xml标记和python对象之间进行明显的映射,并让您尽可能清晰地捕获它们。受django的
orm的启发,您可以编写简单的类定义来定义xml文档的预期结构。例如:
>;>import dexml
>;>from dexml import fields
>;>class person(dexml.model):
…name=fields.string()
…age=fields.integer(标记名“age”)
然后您可以将XML文档解析为如下对象::
>;p=person.parse(“<;person name='foo mcbar'>;<;age>;42<;/age>;<;/person>;”)
>;>;p.name
u'foo mcbar'
>;>;p.age
42
,您可以将对象呈现为这样的XML文档::
>;>;p=person(name=“英俊的b.wonderful”,age=36)
>;>;p.render()
'<;?XML版本=“1.0”?>;<;person name=“帅气的B.wonderful”>;<;年龄>;36<;/age>;<;/person>;'
>格式错误的文档将引发分析错误:
>;>;p=person.parse(“<;person>;<;age>;92<;/age>;<;/person>;“
回溯(最近一次调用时间):
…
分析错误:未找到必需字段:“名称”
当然,嵌套模型定义时会更有趣,例如::
gt>类组(dexml.model):
…name=fields.string(attrname=“name”)
…members=fields.list(person)
…
>;>g=group(name=“monty python”)
>;>g.members.append(person(name=“john cleese”,age=69))
>;>g.members.append(person(name=“terry jones”,age=67))
>;>g.render(fragment=true)
<;group name=“monty python”>;<;person name=“john cleese”>;<;age>;69<;/age>;<;/person>;<;person name=“terry jones”>;<;age>;67<;/age>;<;/person>;<;/group>;'
支持XML名称空间、默认字段值、不区分大小写的分析以及其他有趣的功能。查看以下
类的文档了解更多详细信息:
:model:映射到xml的对象的基类
:field:单个模型字段的基类
:meta:有关如何解析/呈现模型的元信息
=============================
让我们面对现实:xml是现代生活的一个事实。我甚至会说,
它擅长做什么。但这并不意味着工作很容易,也不意味着我们必须喜欢它。大多数情况下,xml
只需要让开,让您做一些实际的工作,而不是编写代码来遍历和操作另一个dom。
dexml模块在xml标记和python对象之间进行明显的映射,并让您尽可能清晰地捕获它们。受django的
orm的启发,您可以编写简单的类定义来定义xml文档的预期结构。例如:
>;>import dexml
>;>from dexml import fields
>;>class person(dexml.model):
…name=fields.string()
…age=fields.integer(标记名“age”)
然后您可以将XML文档解析为如下对象::
>;p=person.parse(“<;person name='foo mcbar'>;<;age>;42<;/age>;<;/person>;”)
>;>;p.name
u'foo mcbar'
>;>;p.age
42
,您可以将对象呈现为这样的XML文档::
>;>;p=person(name=“英俊的b.wonderful”,age=36)
>;>;p.render()
'<;?XML版本=“1.0”?>;<;person name=“帅气的B.wonderful”>;<;年龄>;36<;/age>;<;/person>;'
>格式错误的文档将引发分析错误:
>;>;p=person.parse(“<;person>;<;age>;92<;/age>;<;/person>;“
回溯(最近一次调用时间):
…
分析错误:未找到必需字段:“名称”
当然,嵌套模型定义时会更有趣,例如::
gt>类组(dexml.model):
…name=fields.string(attrname=“name”)
…members=fields.list(person)
…
>;>g=group(name=“monty python”)
>;>g.members.append(person(name=“john cleese”,age=69))
>;>g.members.append(person(name=“terry jones”,age=67))
>;>g.render(fragment=true)
<;group name=“monty python”>;<;person name=“john cleese”>;<;age>;69<;/age>;<;/person>;<;person name=“terry jones”>;<;age>;67<;/age>;<;/person>;<;/group>;'
支持XML名称空间、默认字段值、不区分大小写的分析以及其他有趣的功能。查看以下
类的文档了解更多详细信息:
:model:映射到xml的对象的基类
:field:单个模型字段的基类
:meta:有关如何解析/呈现模型的元信息