2014-07-18 55 views
1

xs:序列說明元素應該按順序排列。假設我有如下所示的xsd。XSD XML分析xs:序列

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="personinfo"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="firstname" type="xs:string"/> 
     <xs:element name="country" type="xs:string"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

下面兩個XML中的哪一個是正確的?

<?xml version="1.0" encoding="UTF-8"?> 
<personinfo> 
    <firstname>Abc</firstname> 
    <firstname>Xyz</firstname> 

    <country>CountryOfAbc</country> 
    <country>CountryOfXyz</country> 
</personinfo> 

<?xml version="1.0" encoding="UTF-8"?> 
<personinfo> 
    <firstname>Abc</firstname> 
    <country>CountryOfAbc</country> 

    <firstname>Xyz</firstname> 
    <country>CountryOfXyz</country> 
</personinfo> 
+0

這是一個合理的問題,但它缺少的是任何跡象表明您試圖根據您的模式驗證您的兩個示例XML文檔(例如,使用我在我的答案中鏈接的在線驗證器)以及根據您的模式確定什麼是有效的更精細的點。無論如何,你應該擁有所有你需要的答案。 – J0e3gan

回答

2

都不是。

將與架構是符合什麼...

<?xml version="1.0" encoding="UTF-8"?> 
<personinfo> 
    <firstname>Abc</firstname> 
    <country>CountryOfAbc</<country> 
</personinfo> 

...

<?xml version="1.0" encoding="UTF-8"?> 
<personinfo> 
    <firstname>Xyz</firstname> 
    <country>CountryOfXyz</country> 
</personinfo> 

您可以使用online XML validator如果您驗證對你的XSD模式的XML文檔本地沒有一個。

如果你真正想要的是連續 1種或多個personinfo元素 - 例如...

<?xml version="1.0" encoding="UTF-8"?> 
<people> 
    <personinfo> 
    <firstname>Abc</firstname> 
    <country>CountryOfAbc</country> 
    </personinfo> 
    <personinfo> 
    <firstname>Xyz</firstname> 
    <country>CountryOfXyz</country> 
    </personinfo> 
</people> 

...嘗試這樣的,而不是一個模式:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="people"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="personinfo" minOccurs="1" maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="firstname" type="xs:string"/> 
       <xs:element name="country" type="xs:string"/> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

否則請參閱@kjhughes對模式的回答,這些模式描述了您在問題中提供的兩個示例文檔。

2

這兩個XML文檔實例都不會對該XSD有效。

這個XML文檔實例將是有效的爲您的XSD:

<personinfo> 
    <firstname>Abc</firstname> 
    <country>CountryOfAbc</<country> 
</personinfo> 

或者,你可以適應XSD,讓您給出了兩個XML文檔實例是通過使用的maxOccursoccurrence constraint有效。

對於您的第一個例子:

<xs:element name="personinfo"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="firstname" type="xs:string" maxOccurs="2"/> 
     <xs:element name="country" type="xs:string" maxOccurs="2"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

對於你的第二個例子:

<xs:element name="personinfo"> 
    <xs:complexType> 
    <xs:sequence maxOccurs="2"> 
     <xs:element name="firstname" type="xs:string"/> 
     <xs:element name="country" type="xs:string"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 
2

就個人而言,我更喜歡這種方式:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="personinfo"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="record" maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="firstname" type="xs:string" /> 
       <xs:element name="country" type="xs:string" /> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

因此XML將會:

<personinfo> 
    <record> 
     <firstname>Abc</firstname> 
     <country>CountryOfAbc</country> 
    </record> 
    <record> 
     <firstname>Xyz</firstname> 
     <country>CountryOfXyz</country> 
    </record> 
</personinfo> 
+1

我站好了。將'maxOccurs =「unbounded」'屬性添加到'record'元素。 – tjeloep

+1

這是另一種選擇,圍繞我的想法(根據我的回答),@cprasad可能真的想要基於經驗 - 並在其示例XML文檔中給出多個「firstname」和「country」元素。請注意,我更正了模式中某些屬性值的引號;可能是複製/粘貼鏈中的一個工具,以便將模式拖入您的回答中,但很清楚你的意思和我認爲只是清理它們的意思,而不是用另一個評論來平衡你的意思。 – J0e3gan

+1

感謝您使報價點。是的,它來自一系列的複製 - 粘貼和查找和替換。 – tjeloep