2010-02-24 7 views
-1

XML:XML Validation problème XSD

<?xml version="1.0" encoding="UTF-8"?> 
<data> 
    <ac code="B2" auto="1"> 
     <fee> 
      <if country="RU">35e 50e 50e 80e 15e 10e</if> 
      <else>10e</else> 
     </fee> 
     <comission> 
      <if country="RU">3%</if> 
      <else>5%</else> 
     </comission> 
    </ac> 
</data> 

Schéma:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

<xs:element name="data" type="data"/> 
<xs:complexType name="data"> 
    <xs:sequence> 
    <xs:element name="ac" minOccurs="0" maxOccurs="unbounded" type="ac"/> 
    </xs:sequence> 
</xs:complexType> 

<xs:complexType name="ac"> 
    <xs:sequence> 
    <xs:element name="fee" type="feecomiss"/> 
    <xs:element name="comission" type="feecomiss"/> 
    </xs:sequence> 
    <xs:attribute name="code" type="xs:string"/> 
    <xs:attribute name="auto" type="xs:decimal"/> 
</xs:complexType> 

<xs:complexType name="feecomiss"> 
    <xs:sequence> 
    <xs:element name="if" minOccurs="0" maxOccurs="unbounded" type="if"/> 
    <xs:element name="else" minOccurs="0" maxOccurs="unbounded" type="xs:string"/> 
    </xs:sequence> 
</xs:complexType> 

<xs:complexType name="if"> 
    <xs:attribute name="country" type="xs:string" /> 
</xs:complexType> 

</xs:schema> 

Ce schéma ne valide pas: (

Mais si j'insérer un élément à l'intérieur "si" en xml

<if country="RU"><lol>35e 50e 50e 80e 15e 10e</lol></if> 

et schéma fixe

<xs:complexType name="if"> 
    <xs:sequence> 
    <xs:element name="lol" type="xs:string"/> 
    </xs:sequence> 
    <xs:attribute name="country" type="xs:string" /> 
</xs:complexType> 

Ce code est valable

Comment puis-je résoudre ce problème? Merci !!! Désolé pour le mauvais anglais

+0

-1: Je me suis essayé à éditer le titre de votre question pour être plus précis afin de découvrir qu'un problème similaire [a déjà été résolu] (http://stackoverflow.com/q/20926860/413020). Je ne pense pas que ce genre de "résoudre mon code" des questions ajoute quelque chose à SO. – Alberto

Répondre

1

Vous devez utiliser l'élément <xsd:simplecontent> ici.

<xs:complexType name="if"> 
    <xs:simpleContent> 
     <xs:extension base="xs:string"> 
     <xs:attribute name="country" type="xs:string" /> 
     </xs:extension> 
    </xs:simpleContent> 
</xs:complexType> 

Vous pouvez trouver plus d'informations sur le XSD tutorial page for text-only elements. Fondamentalement, ce qui ne va pas, c'est que if n'est pas défini pour pouvoir avoir du contenu textuel parce que c'est un type complexe. Vous utilisez simpleContent pour lui permettre de contenir du texte.