验证通过generateDS创建的python类

问题描述 投票:1回答:1

我有几个有时会更改的XSD。

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

这就是为什么我转移到generateDS(版本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,因为它没有'ShipTo'元素,我们没有'country'属性和其他元素)

python xml xsd
1个回答
0
投票

您可以通过XSD模式验证xml是否有效:

import xmlschema
schema = xmlschema.XMLSchema(original_full_path)
 # check xml is valid with xsd file:
    is_valid = schema.is_valid(original_full_path)
    log.warning("is_valid: {}".format(is_valid))
© www.soinside.com 2019 - 2024. All rights reserved.