我在制作复杂元素方面遇到了问题,它既包含可选元素,也包含必需元素。 对于下面的xml,假设h2是必需的,而h1是可选的,顺序无关紧要。
案例1:
<root>
<h1/>
<h2/>
</root>
案例2:
<root>
<h2/>
</root>
案例3:
<root>
<h2/>
<h1/>
</root>
XSD:
<xs:element name="root">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="unbounded">
<xs:element name="h1" minOccurs="0"></xs:element>
<xs:element name="h2" minOccurs="1" />
</xs:sequence>
</xs:complexType>
</xs:element>
上述第三种情况在此xsd中失败,但这种情况有效。 我需要一个对所有上述情况都有效的xsd。
答案 0 :(得分:0)
知道你想要的是:
使h2发生在最近1,而h1可以发生多次 可能的
如果XML的内容类似于(RegExpr)<root><h1/>*<h2/><h1/>*</root>
,则可以使用此XSD定义XML有效。
XSD:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="root">
<xsd:complexType>
<xsd:sequence minOccurs="1" maxOccurs="1">
<xsd:element name="h1" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="h2" minOccurs="1" maxOccurs="1"/>
<xsd:element name="h1" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<小时/> 有效的XML示例:
<root>
<h1/>
<h1/>
<h2/>
<h1/>
</root>
2)
<root>
<h1/>
<h2/>
</root>
<小时/> 无效的XML示例:
<h2/>
元素。
<root>
<h2/>
<h1/>
<h2/>
</root>
否<h2/>
元素。
<root>
<h1/>
<h1/>
</root>