IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Valider XML Discussion :

Element Decimal pouvant être vide.


Sujet :

Valider XML

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 20
    Points : 11
    Points
    11
    Par défaut Element Decimal pouvant être vide.
    bonjour a tous.

    Je suis entrain de bosser sur un Schéma XML ou il y a des éléments ayant comme valeur un decimal, un attribut date, et un attribut type.

    Les attributs sont bien validé comme il faut, tout mon problème se situe sur la valeur décimal.
    Mon XML est valide tant que mon tag contient une valeur.

    Voici un extrait de mon fichier XML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            <gebuehren>
                <ausgabeaufschlag date="19.01.2008" type="G">0.01</ausgabeaufschlag>
                <maxausgabeaufschlag date="19.01.2008" type="G">0.04</maxausgabeaufschlag>
                <verwaltungsverguetung date="19.01.2008" type="G">0.38</verwaltungsverguetung>
                <maxverwaltungsverguetung date="19.01.2008" type="G">0.02</maxverwaltungsverguetung>
                <depotbankgebuehr date="19.01.2008" type="G">0.1</depotbankgebuehr>
                <maxdepotbankgebuehr date="19.01.2008" type="G">0.7</maxdepotbankgebuehr>
                <ruecknahmegebuehr date="19.01.2008" type="G">0</ruecknahmegebuehr>
                <maxruecknahmegebuehr date="19.01.2008" type="G">0</maxruecknahmegebuehr>
                <performancegebuehr date="19.01.2008" type="G">0</performancegebuehr>
                <performancegebuehrinfo date="19.01.2008"/>
                <ter date="19.05.2008" type="F">0</ter>
            </gebuehren>
    Pour valider cette liste de noeux, j'ai écrit ca dans le Schéma XML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    	<xs:element name="gebuehren">
    		<xs:complexType>
    			<xs:sequence>
    				<xs:element minOccurs="0" maxOccurs="1" ref="ausgabeaufschlag"/>
    				<xs:element minOccurs="0" maxOccurs="1" ref="maxausgabeaufschlag"/>
    				<xs:element minOccurs="0" maxOccurs="1" ref="verwaltungsverguetung"/>
    				<xs:element minOccurs="0" maxOccurs="1" ref="maxverwaltungsverguetung"/>
    				<xs:element minOccurs="0" maxOccurs="1" ref="depotbankgebuehr"/>
    				<xs:element minOccurs="0" maxOccurs="1" ref="maxdepotbankgebuehr"/>
    				<xs:element minOccurs="0" maxOccurs="1" ref="ruecknahmegebuehr"/>
    				<xs:element minOccurs="0" maxOccurs="1" ref="maxruecknahmegebuehr"/>
    				<xs:element minOccurs="0" maxOccurs="1" ref="performancegebuehr"/>
    				<xs:element minOccurs="0" maxOccurs="1" ref="performancegebuehrinfo"/>
    				<xs:element minOccurs="0" maxOccurs="1" ref="ter"/>
    			</xs:sequence>
    		</xs:complexType>
    	</xs:element>
     
    	<!-- Description of the <ausgabeaufschlag/> -->
    	<xs:element name="ausgabeaufschlag">
    		<xs:complexType>
    			<xs:simpleContent>
    				<xs:extension base="xs:decimal">
    					<xs:attribute name="date" use="required" type="xs:string"/>
    					<xs:attribute name="type" use="required" type="xs:string"/>
    				</xs:extension>
    			</xs:simpleContent>
    		</xs:complexType>
    	</xs:element>
     
    	<!-- Description of the <maxausgabeaufschlag/> -->
    	<xs:element name="maxausgabeaufschlag">
    		<xs:complexType>
    			<xs:simpleContent>
    				<xs:extension base="xs:decimal">
    					<xs:attribute name="date" use="required" type="xs:string"/>
    					<xs:attribute name="type" use="required" type="xs:string"/>
    				</xs:extension>
    			</xs:simpleContent>
    		</xs:complexType>
    	</xs:element>
     
    	<!-- Description of the <verwaltungsverguetung/> -->
    	<xs:element name="verwaltungsverguetung">
    		<xs:complexType>
    			<xs:simpleContent>
    				<xs:extension base="xs:decimal">
    					<xs:attribute name="date" use="required" type="xs:string"/>
    					<xs:attribute name="type" use="required" type="xs:string"/>
    				</xs:extension>
    			</xs:simpleContent>
    		</xs:complexType>
    	</xs:element>
     
    	<!-- Description of the <maxverwaltungsverguetung/> -->
    	<xs:element name="maxverwaltungsverguetung">
    		<xs:complexType>
    			<xs:simpleContent>
    				<xs:extension base="xs:decimal">
    					<xs:attribute name="date" use="required" type="xs:string"/>
    					<xs:attribute name="type" use="required" type="xs:string"/>
    				</xs:extension>
    			</xs:simpleContent>
    		</xs:complexType>
    	</xs:element>
     
    	<!-- Description of the <depotbankgebuehr/> -->
    	<xs:element name="depotbankgebuehr">
    		<xs:complexType>
    			<xs:simpleContent>
    				<xs:extension base="xs:decimal">
    					<xs:attribute name="date" use="required" type="xs:string"/>
    					<xs:attribute name="type" use="required" type="xs:string"/>
    				</xs:extension>
    			</xs:simpleContent>
    		</xs:complexType>
    	</xs:element>
     
    	<!-- Description of the <maxdepotbankgebuehr/> -->
    	<xs:element name="maxdepotbankgebuehr">
    		<xs:complexType>
    			<xs:simpleContent>
    				<xs:extension base="xs:decimal">
    					<xs:attribute name="date" use="required" type="xs:string"/>
    					<xs:attribute name="type" use="required" type="xs:string"/>
    				</xs:extension>
    			</xs:simpleContent>
    		</xs:complexType>
    	</xs:element>
     
    	<!-- Description of the <ruecknahmegebuehr/> -->
    	<xs:element name="ruecknahmegebuehr">
    		<xs:complexType>
    			<xs:simpleContent>
    				<xs:extension base="xs:decimal">
    					<xs:attribute name="date" use="required" type="xs:string"/>
    					<xs:attribute name="type" use="required" type="xs:string"/>
    				</xs:extension>
    			</xs:simpleContent>
    		</xs:complexType>
    	</xs:element>
     
    	<!-- Description of the <maxruecknahmegebuehr/> -->
    	<xs:element name="maxruecknahmegebuehr">
    		<xs:complexType>
    			<xs:simpleContent>
    				<xs:extension base="xs:decimal">
    					<xs:attribute name="date" use="required" type="xs:string"/>
    					<xs:attribute name="type" use="required" type="xs:string"/>
    				</xs:extension>
    			</xs:simpleContent>
    		</xs:complexType>
    	</xs:element>
     
    	<!-- Description of the <performancegebuehr/> -->
    	<xs:element name="performancegebuehr">
    		<xs:complexType>
    			<xs:simpleContent>
    				<xs:extension base="xs:decimal">
    					<xs:attribute name="date" use="required" type="xs:string"/>
    					<xs:attribute name="type" use="required" type="xs:string"/>
    				</xs:extension>
    			</xs:simpleContent>
    		</xs:complexType>
    	</xs:element>
     
    	<!-- Description of the <performancegebuehrinfo/> -->
    	<xs:element name="performancegebuehrinfo">
    		<xs:complexType>
    			<xs:simpleContent>
    				<xs:extension base="xs:decimal">
    					<xs:attribute name="date" use="required" type="xs:string"/>
    				</xs:extension>
    			</xs:simpleContent>
    		</xs:complexType>
    	</xs:element>
     
    	<!-- Description of the <ter/> -->
    	<xs:element name="ter">
    		<xs:complexType>
    			<xs:simpleContent>
    				<xs:extension base="xs:decimal">
    					<xs:attribute name="date" use="required" type="xs:string"/>
    					<xs:attribute name="type" use="required" type="xs:string"/>
    				</xs:extension>
    			</xs:simpleContent>
    		</xs:complexType>
    	</xs:element>
    ( Pour le moment je gère la date en string car il aime pas trop les points comme séparateurs ).

    Avec ce schéma, je valide tout si tout les éléments contiennent une valeur.
    Parcontre, si il y a un élément sans valeur, j'ai cette erreur :
    actxml.xml:57,56: Datatype error: Type:NumberFormatException, Message: Empty string encountered..

    J'avais tenté de déclarer un simple type trouvé sur le net permettant d'avoir un decimal pouvant être vide ... qui contenait string-empty dans le type et le validateur rale sur le string-empty.

    Bref, si vous pouvez éclairer ma lanterne ... ca serai super cool !!

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    il suffit de créer un type étant l'union d'un type "vide" et du type normal de la valeur quand elle est renseignée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <xs:simpleType name="empty">
    	<xs:restriction base="xs:string">
    		<xs:enumeration value=""/>
    	</xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="empty-or-decimal">
    	<xs:union memberTypes="empty xs:decimal"/>
    </xs:simpleType>
    Au passage, c'est dans la FAQ...
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Merci GrandFather pour ta réponse.

    Ok merci, je vais voire ca.
    J'ai réussi en mettant un default="0".
    C'est sale ou ca va ?

    Désolé pour la FAQ, mais j'avais pas trop le temps de faire le tour à ce moment là...

  4. #4
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Citation Envoyé par zedtux Voir le message
    J'ai réussi en mettant un default="0".
    Où as-tu mis un défault ?

    En tout état de cause, la méthode que je t'ai donnée est la plus "propre". Une autre possibilité serait de déclarer l'attribut de type strictement Decimal, et de le rendre optionnel. Mais ça ne peut, selon les cas, pas forcément exprimer la même chose qu'un attribut présent mais vide. A toi de voir selon les données de ton problème.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par GrandFather Voir le message
    Où as-tu mis un défault ?
    Ben dans l'élément pour chacun :
    Pour le premier par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	<!-- Description of the <ausgabeaufschlag/> -->
    	<xs:element name="ausgabeaufschlag" default="0">
    		<xs:complexType>
    			<xs:simpleContent>
    				<xs:extension base="xs:decimal">
    					<xs:attribute name="date" use="required" type="xs:string"/>
    					<xs:attribute name="type" use="required" type="xs:string"/>
    				</xs:extension>
    			</xs:simpleContent>
    		</xs:complexType>
    	</xs:element>

Discussions similaires

  1. [XSD] Traduction de "balise pouvant être vide"
    Par StitchP dans le forum Valider
    Réponses: 1
    Dernier message: 28/07/2010, 15h29
  2. Recherche a partir d'une zone de texte pouvant être vide
    Par pierrequimousse dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 29/01/2010, 15h03
  3. Valeur Element pouvant être null
    Par Luc1an0 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 31/03/2009, 16h51
  4. [XSD]noeud pouvant être de plusieurs types
    Par jesus144 dans le forum Valider
    Réponses: 2
    Dernier message: 12/04/2006, 14h03
  5. [ImageMagick] Image ne pouvant être affichée car elle contient des erreurs
    Par hutchuck dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 09/12/2005, 13h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo