python的轻量级声明性yaml和xml数据绑定。

guts的Python项目详细描述



guts
====


guts由sebastian heimann<;sebastian.heimann@gfz potsdam.de>;编写。它是根据mit许可证发布的。有关更多详细信息,请参阅文件许可证。

基于ebian的linuxes)。

e)

class playlist(object):
xmltagname='playlist'
name=string.t(默认为"无标题playlist")
comment=string.t(可选为true)
song\u list=list.t(song.t())
`````

这些类都带有自动的"初始化":

``pycon
>>from playlist import*
>;>song1=歌曲(name='metropolis',artist='kraftwerk')
>;>song2=歌曲(name='i robot',artist='the alan parsons project',album='i robot')
>;>playlist=播放列表(song\list=[song1,song2])
```

/>``` pycon
>;>>打印歌曲1.dump()
--!播放列表。歌曲名称:metropolis
艺术家:kraftwerk
````

/><;artist>;kraftwerk<;artist>;
<;/song>;
<;song>;
<;name>;i robot<;/name>;
<;album>;i robot<;/album>;
<;artist>;alan parsons项目<;/artist>;
<;/song>;
<;```br/>
验证自己:

``pycon
>;>song1.validate()
>;>song2.year=1977
>;>song2.validate()
>;>song2.year='abc'
>;>song2.validate()
回溯(最近一次调用):

guts.validationerror:year:"abc"i不是int类型的s
```

yaml和xml:

``pycon
>;>playlist2=load_string(playlist.dump())
>;>playlist3=load_xml_string(playlist.dump_xml())
```

ns,它构建为返回生成guts对象的生成器。


此模块附带了一个基本的代码生成器"xml schema to guts",用于将
(某些)xml模式定义(xsd)转换为包含guts类
层次结构的python模块。

下面是一个使用w3c xml模式入门中第一个示例的示例。
模式应在"po.xsd"中定义:

``xml
<;xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema">;

<;xsd:annotation>;
<;xsd:documentation xml:lang="en">;
purchase order schema for example.com.
版权所有2000 example.com。保留所有权利。
<;xsd:documentation>;
<;xsd:annotation>;

<;xsd:element name="purchaseOrder"type="purchaseOrderType"/>;

<;xsd:element name="comment"type="xsd:string"/>;

<;xsd:complexType name="purchaseOrderType">;
<;xsd:sequence>;
<;xsd:element name="shipto"type="usaddress"/>;
<;xsd:element name="billto"type="usaddress"/>;
<;xsd:element ref="comment"minoccurs="0"/>;
<;xsd:element name="items"type="items"/>;
<;/xsd:sequence>;
<;xsd:attribute name="orderdate"type="xsd:date"/>;
<;xsd:complextype>;

<;xsd:complexType name="usaddress">;
<;xsd:sequence>;
<;xsd:element name="name"type="xsd:string"/>;
<;xsd:element name="street"type="xsd:string"/>;
<;xsd:element name="city"type="xsd:string"/>;
<;xsd:element name="state"type="xsd:string"/>;
<;xsd:element name="zip"type="xsd:decimal"/>;
<;xsd:sequence>;
<;xsd:attribute name="country"type="xsd:nmtoken"
fixed="us"/>;
<;xsd:complextype>;

<;xsd:complextype name="it"ems">;
<;xsd:sequence>;
<;xsd:element name="item"minoccurs="0"maxOccurs="unbounded">;
<;xsd:complexType>;
<;xsd:sequence>;
<;xsd:element name="productname"type="xsd:string"/>;
<;xsd:element name="数量">;
<;xsd:simpleType>;
<;xsd:restriction base="xsd:positiveinteger">;
<;xsd:maxexclusive value="100"/>;
<;/xsd:restriction>;
<;/xsd:simpleType>;
<;/xsd:e元素>;
<;xsd:element name="usprice"type="xsd:decimal"/>;
<;xsd:element ref="comment"minocurs="0"/>;
<;xsd:element name="shipdate"type="xsd:date"minocurs="0"/>;
<;/xsd:sequence>;
<;xsd:attribute name="partnum"type="sku"use="required"/>;
<;/xsd:complexType>;
<;/xsd:element>;
<;/xsd:sequence>;
<;/xsd:complexType>;

<;!--库存单位,用于标识产品的代码-->;
<;xsd:simpleType name="sku">;
<;xsd:restriction base="xsd:string">;
<;xsd:pattern value="\d{3}-[a-z]{2}"/>;
<;xsd:restriction>;
<;xsd:simpleType>;

<;xsd:schema>;
``


``xml
<;?XML版本="1.0"?>;
<;PurchaseOrder OrderDate="1999-10-20">;
<;收货方国家/地区="我们">;
<;名称>;爱丽丝史密斯<;/名称>;
<;街道>;枫树街123号<;/street>;
<;城市>;密尔谷<;
<;州>;CA<;
<;州>;
<;邮编>;90952<;/zip>;
<;/shipto>;
<;billto country="us">;
<;name>;robert smith<;/name>;
<;street>;橡树大道8号<;/street>;
<;city>;老城<;/city>;
<;state>;PA<;
<;state>;
<;zip>;95819<;/zip>;
<;billto>;
<;comment>;快点,我的草坪快疯了<;comment>;
<;items>;
<;item partnum="872-aa">;
<;productname>;割草机<;productname>;
<;quantity>;1<;quantity>;
<;usprice>;148.95<;/usprice>;
<;comment>;确认这是电动的<;comment>;
<;item>;
<;item partnum="926-aa">;
<;productname>;婴儿监护仪<;productname>;
<;quantity>;1<;quantity>;
<;usprice>;39.98<;/usprice>;
<;shipdate>;1999-05-21<;/shipdate>;
<;/item>;
<;/items>;
<;/purchaseorder>;
``````

y`:

`` python
从guts导入*


类sku(stringpattern):
pattern='\\d{3}-[a-z]{2}'



class comment(string):
xmltagname='comment'




class quantity(int):
pass



class usaddress(object):
country=string.t(默认值='us',可选值=true,xmltyle='attribute')
name=string.t()
street=string.t()
city=string.t()
state=string.t()
zip=float.t()


part椆num=sku.t(xmlstyle="attribute')
product椆name=string.t()
quantity=quantity.t()
us椆price=float.t(xmlstagname="usprice')
comment=comment.t(可选=true)
ship_date=datetimestamp.t(可选=true)



class items(object):
item_list=list.t(item.t())



class purchaseordertype(object):
order_date=datetimestamp.t(可选=true,xmlstyle="attribute')
ship_to=usaddress.t()
bill_to=usaddress.t()
comment=comment.t(可选=true)
items=items.t()



class purchaseOrder(purchaseOrderType):
xmltagname='purchaseOrder'
````

/>>;>>从采购订单导入*
>;>>订单=加载XML(文件名='po.xml')
>;>>打印订单>转储yaml
--!采购订单
订单日期:'1999-10-20'
发货地址:!邮政编码:
姓名:alice smith
街道:123 maple street
城市:mill valley
州:ca
邮政编码:90952.0
帐单地址:!po.usaddress
name:robert smith
street:8 oak avenue
city:old town
state:pa
zip:95819.0
评论:快点,我的草坪快疯了!采购订单项目
项目清单:
-!采购订单项目
零件编号:872-AA
产品名称:割草机
数量:1
美国价格:148.95
备注:确认这是电动的
-!采购订单项目:婴儿监护仪数量:1
美国价格:39.98
发货日期:1999-05-21

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

推荐PyPI第三方库


热门话题
用Java学习Eclipse可视化编辑器Swing   eclipse如何找到运行Java程序所需的时间?   JAVA用于在Tomcat 8上运行Jena API的lang.UnsupportedClassVersionError   java在Main中调用字符串方法   javascript“子进程”。exec无法运行Java函数   java如何使用Gmail API获取电子邮件正文内容   java为什么客户端看不到服务器发送的第一条消息?   java无法在安卓 WebView中滚动到顶部   从服务器运行web服务时,java代码中的日期为空   从子任务返回后执行后台任务时发生java错误   java无法一致地处理弹出窗口   java(Android)通过蓝牙向µ控制器发送字节   java无法在emulator中启动AVD?安卓工作室   Android Java应用程序正在冻结,没有返回错误消息   java如何使用TestNg记录测试历史?