寻找一位XML Guru来回答一个异常。我运气不好,检查了多个网页。
我有一个带有xs的复杂数据类型:all in it设置为minOccurs = 0,如下所示:
<xs:complexType name="EffectRecord">
<xs:complexContent>
<xs:restriction base="xs:anyType">
<xs:all minOccurs="0" maxOccurs="1">
<xs:element name="P1Name" type="xs:string"/>
<xs:element name="P2Name" type="xs:string"/>
<xs:element name="P3Name" type="xs:string"/>
<xs:element name="BasedOnStat" type="xs:string"/>
</xs:all>
<xs:attribute name="EffectName" type="xs:string" use="required"/>
<xs:attribute name="Description" type="xs:string" use="required"/>
<xs:attribute name="CostFormula" type="xs:string" use="required"/>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
我稍后在我的架构中使用该类型:
xs:element name="World">
<xs:complexType>
<xs:all>
<xs:element name="Statistics">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="unbounded">
<xs:element name="Statistic" type="StatRecord"/>
</xs:sequence>
</xs:complexType>
<xs:key name="StatKey">
<xs:selector xpath="World/Statistics"/>
<xs:field xpath="@Name"/>
</xs:key>
<xs:keyref refer="StatKey" name="StatRef">
<xs:selector xpath="EffectRecord"/>
<xs:field xpath="BasedOnStat"/>
</xs:keyref>
</xs:element>
<xs:element name="Effects">
<xs:complexType>
<xs:sequence maxOccurs="unbounded" minOccurs="0">
<xs:element name="Effect" type="EffectRecord"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
当我尝试在我的架构驱动的XML编辑器中使用此架构编写文档时,可以这样做:
<?xml version="1.0" encoding="UTF-8"?>
<Statistics>
<Statistic Name="Strength" Abbreviation="STR" Cost="3"/>
<Statistic Name="Toughness" Abbreviation="TOU" Cost="2"/>
</Statistics>
<Effects>
<Effect EffectName="foo" Description="A foo" CostFormula="P1*2">
</Effect>
</Effects>
但这会产生错误元素的内容&#39;效果&#39;不完整。其中一个是{P2Name,P3Name,BasedOnStat}&#39;是预期的。
<?xml version="1.0" encoding="UTF-8"?>
<Statistics>
<Statistic Name="Strength" Abbreviation="STR" Cost="3"/>
<Statistic Name="Toughness" Abbreviation="TOU" Cost="2"/>
</Statistics>
<Effects>
<Effect EffectName="foo" Description="A foo" CostFormula="P1*2">
<P1Name></P1Name>
</Effect>
</Effects>
为什么包含其中一个元素意味着它们都必须包括在内?这与我发现的xs:all的任何定义都不匹配。我想要的是所有的所有子元素都是可选的,但最多只出现一次。
谢谢,真的在这里击打屏幕。
答案 0 :(得分:0)
好的,我回答了自己的问题。我的minOccurs处于错误的水平。对于我想要的效果,它属于每个元素,而不是全部。