XML Schema指南
基本 XSD 结构
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="user">
<xs:complexType>
<xs:sequence>
<xs:element name="id" type="xs:integer"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="email" type="xs:string" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="active" type="xs:boolean" default="true"/>
</xs:complexType>
</xs:element>
</xs:schema>
常用 XSD 类型
| Type | 说明 | 示例 |
|---|---|---|
| xs:string | 任意字符串 | "hello" |
| xs:integer | 整数 | 42 |
| xs:decimal | 十进制数 | 3.14 |
| xs:boolean | 布尔值 | true/false |
| xs:date | 日期 | 2024-01-15 |
| xs:dateTime | 日期时间 | 2024-01-15T10:30:00 |
| xs:anyURI | URI 值 | https://example.com |
约束
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="150"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- 模式约束 -->
<xs:element name="zip">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{5}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- Enum -->
<xs:simpleType name="Status">
<xs:restriction base="xs:string">
<xs:enumeration value="active"/>
<xs:enumeration value="inactive"/>
</xs:restriction>
</xs:simpleType>
用 Python 验证 XML
from lxml import etree
# 加载 Schema
with open('schema.xsd') as f:
schema = etree.XMLSchema(etree.parse(f))
# 解析并验证
with open('data.xml') as f:
doc = etree.parse(f)
if schema.validate(doc):
print("验证通过!")
else:
print(schema.error_log)