python的死简单对象xml映射器

dexml的Python项目详细描述


让我们面对现实:XML是现代生活的一个事实。我甚至会说 它是good在做什么。但这并不意味着工作很容易 但这并不意味着我们必须喜欢它。大多数时候,xml 只需要让开让你做些实际的工作 编写代码来遍历和操作另一个dom。

dexml模块采用xml标记和python对象之间的明显映射 让你尽可能清晰地捕捉到它。灵感来源于Django's orm,编写简单的类定义来定义 您的XML文档。喜欢这样:

>>> import dexml
>>> from dexml import fields
>>> class Person(dexml.Model):
...   name = fields.String()
...   age = fields.Integer(tagname='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="Handsome B. Wonderful",age=36)
>>> p.render()
'<?xml version="1.0" ?><Person name="Handsome B. Wonderful"><age>36</age></Person>'

格式错误的文档将引发分析错误:

>>> p = Person.parse("<Person><age>92</age></Person>")
Traceback (most recent call last):
    ...
ParseError: required field not found: 'name'

当然,当您嵌套模型定义时,它会变得更有趣,例如:

>>> class Group(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:the base class for objects that map into XML
Field:the base class for individual model fields
Meta:meta-information about how to parse/render a model

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java错误:无法解析方法   如何用相同的父标记和子标记在Java中解析XML?   日期使用Java中的时区偏移将本地时间转换为UTC   java如何在多进程、多线程环境中读取文件   WebView中的java弹出式对话框不在当前显示范围内,但在chrome浏览器中运行良好   只有2个参数的java递归二进制搜索方法   无法在java中调用函数   java JavaMail在Tomcat服务器上运行时停止工作   反射通过java程序生成、编译和运行java类   java Android:如何使ListView即使在应用程序关闭后仍保持禁用状态   在JAVA中识别匿名类实例   java渲染一个由三角形组成的立方体,在旋转时会产生奇怪的角度   函数式编程如何基于比较连续的列表元素将Java流减少为布尔值   java如何替换列表中的多个项目?   java Android如何获取随机sqlite数据?   java我已经将useSSL设置为false,但仍然收到警告   java使用动态变量生成jlabel   apachespark:java。lang.NoClassDefFoundError v2TableWithV1回退