验证从generateDS创建的python类

时间:2015-03-25 14:25:28

标签: python xml xsd

我有几个XSD有时会改变。

我曾经编写过硬编码的XML文件,因此每次更改XSD时,我都必须搜索依赖于XSD的XML文件。

这就是为什么我转向生成DS(版本2.15b)。

我使用generateDS编写了一个脚本,因此每次更改XSD时,genereateDS脚本都会运行并生成类。

生成的类用作"结构"让我检查XML是否适合。

例如,如果我将此作为我的XSD:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
       xmlns:tns="http://tempuri.org/PurchaseOrderSchema.xsd" 
       targetNamespace="http://tempuri.org/PurchaseOrderSchema.xsd" 
       elementFormDefault="qualified">

   <xsd:element name="PurchaseOrder" type="tns:PurchaseOrderType"/>
   <xsd:complexType name="PurchaseOrderType">
       <xsd:sequence>
           <xsd:element name="ShipTo" type="tns:USAddress" maxOccurs="2"/>
           <xsd:element name="BillTo" type="tns:USAddress"/>
       </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:integer"/>
       </xsd:sequence>
       <xsd:attribute name="country" type="xsd:NMTOKEN" fixed="US"/>
    </xsd:complexType>
</xsd:schema>

我正在创建这个类:

us = orders_api.USAddress(state = "NY")
pot = orders_api.PurchaseOrderType(BillTo = us,   
                           OrderDate=datetime.datetime.now())

有没有办法用XSD验证实例(pot)? (对于此示例,pot不是有效的xml,因为它没有&#39; ShipTo&#39;元素,我们没有&#39; country&#39;属性和其他元素)

1 个答案:

答案 0 :(得分:0)

您可以使用XSD模式验证XML是否有效:

import xmlschema

schema = xmlschema.XMLSchema(original_full_path)

# Check XML is valid with an XSD file:
is_valid = schema.is_valid(original_full_path)
log.warning("is_valid: {}".format(is_valid))