给出以下xml示例:
<MyCustomXml>
<ClientId>SomeGuid</ClientId>
<Contact>someEmail@example.com</Contact>
<Data>
<Item name="SomeName" type="String">
SomeValue
</Item>
<Item name="SubList" type="List">
<Data>
<Item name="AnotherItem" type="String">
Hello
</Item>
<Item name="Key2" type="String">
World
</Item>
<Item name="Sub2" type="List">
<Data>
<Item name="KeeyGoing" type="String">
The Sub list can keep going infinately
</Item>
</Data>
</Item>
</Data>
</Item>
</Data>
</MyCustomXml>
我为这个xml创建了以下xsd
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="MyCustomXml" >
<xs:complexType>
<xs:all>
<xs:element name="ClientId" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="Contact" type="xs:string" minOccurs="0" maxOccurs="1" />
<xs:element ref="Data" minOccurs="0" maxOccurs="1" />
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="Data" substitutionGroup="Data">
<xs:complexType>
<xs:sequence>
<xs:element ref="Item" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Item" substitutionGroup="Item">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element ref="Data" minOccurs="0" />
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="type" use="required" />
</xs:complexType>
</xs:element>
</xs:schema>
编入http://www.validome.org/grammar/validate/ xsd无效。以下错误是:
第13行专栏:55
错误:检测到元素':数据'的循环替换组
错误位置:
第20行专栏:55
错误:检测到元素':Item'的循环替换组
错误位置:
如何解决循环替换?我尝试更改substitutionGroup但是没有用。
答案 0 :(得分:1)
您不需要substitutionGroup。至少不适用于上面的XML示例。 只有在您希望允许“就地”替换元素时才需要substitutionGroup。
在您的架构中,您可以替换&lt; Data&gt;与&lt; Item&gt;可以替代 &lt;数据&GT;可以用&lt; Item&gt;代替...
除此之外,您的架构看起来也适合您想要实现的目标。