1

假设我有这个 XmlSchema 片段:

<xs:element name= "A">
 <xs:complexType>
  <xs:sequence>
   <xs:element ref="A1" maxOccurs="1"/>
   <xs:element ref="A2" maxOccurs="unbounded"/>
   <xs:element ref="A3" maxOccurs="1"/>
  </xs:sequence>
 </xs:complexType>
</xs:element>

我使用 XmlSchemaValidator.GetExpectedParticles() 方法循环进入 A 的孩子。因为 complexType 是一个序列,所以要验证同级,我需要验证前一个,退出上下文,然后 GetExpectedPartciles() 才会返回下一个同级。

因此,当我在列表的 A1 项中时,我调用这些代码行:

validator.ValidateElement("A1", null, null); --> validate and enter in the Context of A1
validator.ValidateEndOfAttributes(null); --> End the validation of Attributes
validator.SkipToEndElement(null); --> Exit from the context; only when the ComplexType is a Sequence

当我到达 A2 元素时,GetExpeectedParticles 会像循环一样返回相同的元素 A2,但我无法到达 A3 元素(或者我不知道该怎么做)。我想这是因为 maxoccurs 是无限的。

所以问题是我怎样才能跳到下一个兄弟A3?

4

1 回答 1

1

GetExpectedParticles() 确实返回 A3 和 A2。因此,如果您想退出循环,只需继续验证数组中的下一项,如果当前 MaxOccursString = "unbounded",则不要再次调用 GetExpectedParticles()。

于 2012-07-27T23:26:08.120 回答