我有几个有时会更改的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'属性和其他元素)
您可以通过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))