2010-09-24 4 views
0

Je dois créer un fichier XML comme ceci:Éléments XSD: comment placer des valeurs simples simples de type complexe (séquence)

<AGENDA> 
<COVER COLOR>BLACK</COVER COLOR> 
<PRICE>24.99</PRICE> 
<ENTRIES> 
    <NAMESURNAME>AAABBB</NAMESURNAME> 
    <PHONENUMBER>3434534543</PHONENUMBER> 
    <NAMESURNAME>EEEAAA</NAMESURNAME> 
    <PHONENUMBER>2342342</PHONENUMBER> 
</ENTRIES> 
</AGENDA> 

C'est, une ou plusieurs options et un type complexe en séquence. Je n'ai besoin que d'un ensemble d'options par fichier XML pendant une ou plusieurs entrées. J'utilise l'éditeur de texte xsd intégré dans VS2010 mais je ne sais pas comment placer correctement les éléments d'options. Si je tape (après la balise <xsd:schema....>):

<xsd:element name="OPTION1" type="xsd:string"/> 
    <xsd:element name="RawPolling"> 
    <xsd:complexType> 
     <xsd:sequence maxOccurs="unbounded" minOccurs="0"> 
     <xsd:element name="RawPollingEntry"> 
      <xsd:complexType> 
      <xsd:sequence maxOccurs="1" minOccurs="0"> 
       <xsd:element name="Nome" type="xsd:string" /> 
..... 
.... 

Je ne reçois pas d'erreur sur xsd mais quand j'écris le xml que je reçois « document XML ne peut pas contenir des éléments de niveau racine multiples » J'ai essayé de déplacer le OPTION1 dans le RawPolling (mais pas à l'intérieur de RawPollingEntry, OPTION1 ne fait pas partie d'un type complexe/séquence, je n'ai besoin que d'une OPTION1 par fichier xml) et d'autres erreurs ("l'élément ... a un élément enfant invalide ...) ?

Comment puis-je arriver

+0

duplication possible de [document XML ne peut pas contenir plusieurs éléments de niveau racine] (http://stackoverflow.com/questions/8162207/xml-document-cannot-contain-multiple-root-level-elements) –

Répondre

2

tout d'abord, votre XML non valable - vous ne pouvez pas avoir de balises avec des espaces dans leurs noms, donc:

<COVER COLOR> ..... </COVER COLOR> 

est invalide pour commencer.

Suivant - .NET est livré avec un excellent outil appelé xsd.exe. Dans ce cas, j'ai rendu votre XML valide (j'ai changé la balise en <COVERCOLOR>) puis j'ai exécuté xsd.exe dessus - cela produit un fichier de schéma XML basé sur le contenu de votre fichier XML.

Le résultat ici est la suivante:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema id="newschema" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="AGENDA"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="COVERCOLOR" type="xs:string" minOccurs="0" /> 
     <xs:element name="PRICE" type="xs:string" minOccurs="0" /> 
     <xs:element name="ENTRIES" minOccurs="0" maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="NAMESURNAME" nillable="true" minOccurs="0" maxOccurs="unbounded"> 
       <xs:complexType> 
        <xs:simpleContent msdata:ColumnName="NAMESURNAME_Text" msdata:Ordinal="0"> 
        <xs:extension base="xs:string"> 
        </xs:extension> 
        </xs:simpleContent> 
       </xs:complexType> 
       </xs:element> 
       <xs:element name="PHONENUMBER" nillable="true" minOccurs="0" maxOccurs="unbounded"> 
       <xs:complexType> 
        <xs:simpleContent msdata:ColumnName="PHONENUMBER_Text" msdata:Ordinal="0"> 
        <xs:extension base="xs:string"> 
        </xs:extension> 
        </xs:simpleContent> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

Vous devriez trouver votre xsd.exe dans un chemin quelque chose de similaire à ceci:

C:\Program Files (x86)\Microsoft SDKs\Windows\v6.0A\Bin\ 

Ceci est un 64-bit machine Windows 7 - sur 32 bits, ce serait c:\program files\... à la place.

Questions connexes