我有xsd用于XML的验证结构,它可以出现两种类型的相同标签。所以我必须在我的xsd中处理这两个scenerio。我搜索并发现备用和选择标签是为了完成我的要求,但无法插入适当的格式:
以下是标签的类型:
要么
<funcs>
<joint>
<functionName value=""/>
<indataType value=""/>
</joint>
</funcs>
或
<funcs path="myinfo.txt"/>
当我插入异常后发现的替代标签时:
Exception: s4s-elt-must-match.1: The content of 'funcs' must match (annotation?, (simpleType | complexType)?, (unique | key | keyref)*)). A problem was found starting at: alternative.
答案 0 :(得分:0)
如果可以在您的案例中以不同方式命名'funcs'标签,我的回答会帮助您。
您可以使用此XSD:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xsd:element name="root">
<xsd:complexType>
<xsd:choice>
<xsd:element ref="funcs_1"/>
<xsd:element name="funcs_2" type="f2"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<xsd:element name="funcs_1">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="joint" type="f1" maxOccurs="1" minOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="f1">
<xsd:sequence>
<xsd:element name="functionName" type="f3">
</xsd:element>
<xsd:element name="indataType" type="f3">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="f3">
<xsd:attribute name="value" type="xsd:string" use="required"/>
</xsd:complexType>
<xsd:complexType name="f2">
<xsd:attribute name="path" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:schema>
要验证这两个XML,
XML1:
<root>
<funcs_1>
<joint>
<functionName value=""/>
<indataType value=""/>
</joint>
</funcs_1>
</root>
XML2:
<root>
<funcs_2 path="myinfo.txt"/>
</root>