1

我有几个 XSD 有时会发生变化。

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

这就是我转向 generateDS(2.15b 版)的原因。

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

生成的类用作我检查 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())

有没有办法pot使用 XSD 验证实例 ( )?(对于这个例子,pot 不是一个有效的 xml,因为它没有 'ShipTo' 元素,我们没有 'country' 属性和其他元素)

4

1 回答 1

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))
于 2020-03-01T10:15:01.747 回答