2011-03-08 70 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