2009-09-10 7 views
1

J'ai XML qui comprend un élément qui a l'attribut: xsi: type = "AnswerBool". Mon xsd a cet élément et a mis en place un attribut avec le nom = "type", puis restreint les valeurs d'énumération à "AnswerBool" (et autres). Cependant, lorsque j'essaie de valider le XML, il échoue. Si je change le XML pour que l'élément utilise le type plutôt que xsi: type tout va bien.L'élément XML avec l'attribut "xsi: type" ne valide pas. Il attend un attribut "type"

XML:

 <Answer xsi:type="AnswerBool"> 

-1

XSD:

 <xs:element name="Answer" minOccurs="0" maxOccurs="unbounded"> 
      <xs:complexType> 
       <xs:sequence> 
        <xs:element name="Value"> 
         <xs:complexType> 
          <xs:simpleContent> 
           <xs:extension base="xs:string"> 
            <xs:attribute name="type"> 
             <xs:simpleType> 
              <xs:restriction base="xs:string"> 
               <xs:enumeration value="xsd:int"/> 
              </xs:restriction> 
             </xs:simpleType> 
            </xs:attribute> 
           </xs:extension> 
          </xs:simpleContent> 
         </xs:complexType> 
        </xs:element> 
       </xs:sequence> 
       <xs:attribute name="type" use="optional"> 
        <xs:simpleType> 
         <xs:restriction base="xs:string"> 
          <xs:enumeration value="AnswerBool"/> 
          <xs:enumeration value="AnswerMsc2DTO"/> 
         </xs:restriction> 
        </xs:simpleType> 
       </xs:attribute> 
      </xs:complexType> 
     </xs:element> 

J'ai essayé de nommer le "type" attribut "xsi: type" mais je ne suis pas autorisé à avoir un ':' dans le nom. Malheureusement, je ne peux pas mettre à jour le XML pour ne pas utiliser "xsi:" avant "type". Je sais ce que je fais est fondamentalement une sorte de travail autour de permettre plusieurs types différents pour mon élément "Réponse". Donc, je pourrais pousser les choses trop loin pour que tout cela fonctionne. Cependant ...

Est-ce que quelqu'un a des idées sur comment valider mon XML? Je veux dire est-il possible d'inclure le "xsi:" dans le nom de mon attribut ou peut-être y at-il un moyen de faire que le processus de validation regarde la partie "type" et ignore le "xsi:"?

Répondre

2

D'abord, xsi est le préfixe classique donné pour l'instance de schéma, donc ne changent pas.

Deuxièmement, le but de xsl:type est de désigner qu'un élément particulier a un type particulier d'un schéma XML. Dans le fragment du schéma que vous avez montré, "Answer" est le seul type de schéma. "AnswerBool" et "AnswerMsc2DTO" sont des valeurs qu'un attribut déclaré type peut avoir, mais que "type" n'est pas identique à xsi:type. Donc, dans votre fichier, vous devez utiliser type si le fichier XML et le schéma se trouvent dans le même espace de noms (par défaut).

Espérons que ça aide.

0

xsi, voici le préfixe indiquant les xmlns, à savoir l'espace de noms

L'entrée xml est probablement manquant une référence à l'espace de noms correspondant.

En général, xsi est utilisé pour l'espace de noms d'instance de schéma.

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+0

Je ne suis pas sûr de comprendre ce que vous voulez dire. L'instance de l'élément racine XML est déjà définie pour http://www.w3.org/2001/XMLSchema-instance. Suis-je censé ajouter d'une manière ou d'une autre ce xsi au schéma? – Eves

+0

Bon, et est le préfixe utilisé avec cet espace de noms aussi xsi? Si c'est le cas, regardez le fait que l'élément Answer n'est pas effectivement déclaré comme ayant un type "xsi" (peut-être est-il simplement déclaré comme "rien" (ie avec le type par défaut xmlns, actualy). alors voyez que l'attribut type pour les nœuds Answer utilise ce préfixe particulier – mjv

+0

Rien ne semble fonctionner pour moi Les instances de mon schéma sont toutes les mêmes et il y a toujours un problème, je vais devoir passer cette méthode. l'aide si – Eves

Questions connexes