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我不知道为什么我的非常简单的JPA项目不能工作   java编程故障操作listenersFillRect   java缓冲区图像宽度和高度随机反转值   使用java从ldap服务器获取数据   ObjectInputStream的反序列化Java运行时错误   java HTTP400:GET请求在Wildfly 18上不起作用,但在JBoss 7上起作用   仅运行testMethod()的java JMH基准测试   java Mockito:捕获HttpServletResponse#sendError()   maven Java Security正在阻止应用程序启动   Aspose pdfviewer中RussianLitter链接的java问题   java我在访问具有值的单元格时遇到空指针异常?   java如何在返回类型为int[]的函数中声明长度未知的整数数组?   java如何在NetBeans中为组织目的创建文件夹?   zip Java ZipFile api无法提取大型文件   字节码检测的Java代理问题