2011-03-08 75 views
3

我需要为我们要在系统之间使用的XML文件生成XSD,以便验证我们得到的数据是否有效。当节点有多个子节点时,针对XSD的XML验证失败

的XML看起来是这样的(但更多的字段):

<Request> 
<Request_ID>1000012295</Request_ID> 
<Extra_Info> 
    <Item> 
    <Item_Number>0000000001</Item_Number> 
    <ItemDescription>test- 2</ItemDescription>  
    </Item> 
    <Item> 
    <Item_Number>0000000002</Item_Number> 
    <ItemDescription>test - 2</ItemDescription> 
    </Item> 
</Extra_Info> 
</Request> 

和我的XSD如下:

<?xml version="1.0" encoding="utf-16"?> 
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="Request"> 
    <xsd:complexType> 
     <xsd:sequence> 
     <xsd:element name="Request_ID" type="xsd:int" /> 
     <xsd:element name="Extra_Info"> 
      <xsd:complexType> 
      <xsd:sequence> 
       <xsd:element name="Item"> 
       <xsd:complexType> 
        <xsd:sequence> 
        <xsd:element name="Item_Number" type="xsd:int" /> 
        <xsd:element name="ItemDescription" type="xsd:string" /> 
        </xsd:sequence> 
       </xsd:complexType> 
       </xsd:element> 
      </xsd:sequence> 
      </xsd:complexType> 
     </xsd:element> 
     </xsd:sequence> 
    </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

此架构的工作原理时,我只有一个Item节点,但作为一旦我有多个,我得到以下错误:

元素'Extra_Info'具有无效的子元素'Item'。

如果它被指定为一个序列,为什么它不工作?

谢谢!

PS:我以前This Online Validator快速验证,但我也得到了同样的错误与XMLReader的

回答

3

通过预设最低和最高的序列中定义即使当发生用于被设置为1的元素

您EXTRA_INFO元素定义应该如下:

<xsd:element name="Extra_Info"> 
    <xsd:complexType> 
    <xsd:sequence> 
     <xsd:element name="Item" maxOccurs="unbounded"> 
     <xsd:complexType> 
      <xsd:sequence> 
      <xsd:element name="Item_Number" type="xsd:int" /> 
      <xsd:element name="ItemDescription" type="xsd:string" /> 
      </xsd:sequence> 
     </xsd:complexType> 
     </xsd:element> 
    </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 

注:其中规定的无界属性你可以有一个或多个这些元素。

可以拥有任意数量的项目,你可以添加的minOccurs =“0”的项目元素,所以它看起来是这样的:

<xsd:element name="Item" maxOccurs="unbounded" minOccurs="0"> 
2

您必须在XSD文件属性maxOccurs="unbounded"添加到元素Item

+0

谢谢!我看到了minOccur和maxOccur属性,但认为这些属性只是*用于启用约束,而不是提升它们 – 2011-03-08 18:29:09