一个非常简单的 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(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>'
格式错误的文档会引发 ParseError:
>>> 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 命名空间、默认字段值、不区分大小写的解析以及更多有趣的东西。查看以下类的文档以获取更多详细信息:
- 型号:
映射到 XML 的对象的基类
- 领域:
单个模型字段的基类
- 元:
关于如何解析/渲染模型的元信息