带属性的列表型XSD Type定义需求及XML示例问询
没问题,我来帮你定义符合目标XML结构的XSD Schema,先理清楚需求细节,再给出具体实现:
匹配目标XML的XSD Schema定义
先明确你给出的XML结构规则:
<run-list>作为根元素,可包含任意数量的<topic>子元素<topic>必须带必填的name属性,同时允许包含0个或多个<file>子元素<file>必须带必填的number属性,还可以包含文本内容(即属性+文本节点的混合内容)
下面是完全匹配该结构的XSD代码:
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <!-- 定义根元素run-list --> <xs:element name="run-list"> <xs:complexType> <xs:sequence> <!-- 允许任意数量的topic元素 --> <xs:element name="topic" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <!-- topic下可包含0到多个file元素 --> <xs:element name="file" minOccurs="0" maxOccurs="unbounded"> <xs:complexType mixed="true"> <!-- 定义file的必填number属性 --> <xs:attribute name="number" type="xs:string" use="required"/> </xs:complexType> </xs:element> </xs:sequence> <!-- 定义topic的必填name属性 --> <xs:attribute name="name" type="xs:string" use="required"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
关键细节说明:
- 针对
<file>元素设置mixed="true",让它支持同时包含属性和文本内容,完美适配你示例中带多行文本的<file>节点 maxOccurs="unbounded"实现了“任意数量”的元素需求use="required"标记name和number为必填属性,符合你的要求minOccurs="0"确保<topic>可以不包含任何<file>子元素
用这个XSD校验你给出的XML示例,完全可以通过验证哦!
内容的提问来源于stack exchange,提问作者Joseph Gagnon
相关产品推荐
相关产品推荐

