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:anyURIURI 值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)