我有几个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;属性和其他元素)
答案 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))