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

C++Builder Discussion :

XML data binding, comment savoir quel élément de type "choice" est présent ?


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Par défaut XML data binding, comment savoir quel élément de type "choice" est présent ?
    Bonjour,

    je ne suis pas sûre d'être au bon endroit sur le forum vu que ma question porte sur la databinding xml de c++ builder...
    J'utilise C++ builder XE et le data binding fournit dans l'éditeur.
    Un des noeuds du fichier XSD est un "choice" (choix exclusif entre plusieurs éléments enfants possible).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <xs:choice>
       <xs:element ref="binaryPointInteger"/>
       <xs:element ref="enumeration"/>
       <xs:element ref="bitField"/>
       <xs:element ref="string"/>
    </xs:choice>
    Je parse le fichier XML correspondant, et dans mon code, je ne sais pas comment déterminer lequel des éléments du choice est présent ?
    si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	if (type->Get_string() != NULL){
    		//  blabla
    	}
    	if (type->Get_binaryPointInteger() != NULL) {
    		// blabla
    	}
    	if (type->Get_enumeration() != NULL){
    		//  blabla
    	}
    	if (type->Get_bitField() != NULL){
    		//  blabla
    	}
    et bien je passe dans chacun des if....

    merci de votre aide !!!

    Pascale38

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 079
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 079
    Par défaut
    tu parles d'un XSD mais est-ce que ton XML est valide selon ce XSD ?

    Ton choice n'a pas de de Nom ?
    Est-ce directement à la racine du XML ?
    D'ailleurs, on n'a pas de le contenu du XML, en réalité, le XSD on s'en fout un peu !

    Type est hérité de IXMLNode, je suppose, c'est code généré automatiquement !
    Dommage de ne pas avoir un nom de "type" plus précis !
    Tu as regardé ChildNodes ?

    il me semble qu'il y a aussi un option genre doNodeAutoCreate ou doAttrNull qui peuvent influencer le test != NULL
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Par défaut
    Bonjour ShaiLeTroll,

    mon choice s'appelle type (oui je sais ça porte à confusion comme nom, mais ça n'est pas moi qui est créé le xsd !!) et non il n'est pas à la racine.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <xs:element name="type">
    	<xs:complexType>
    		<xs:sequence>
    			<xs:choice>
    				<xs:element ref="binaryPointInteger"/>
    				<xs:element ref="enumeration"/>
    				<xs:element ref="bitField"/>
    				<xs:element ref="string"/>
    			</xs:choice>
    		</xs:sequence>
    	</xs:complexType>
    </xs:element>
    Oui mon xml est valide !
    Par exemple (cas où le type est binaryPointInteger ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <type>
    	<binaryPointInteger>
    		<size>1</size>
    		<mode>unsigned</mode>
    		<binPointLocation>0</binPointLocation>
    		<displayUnits>N/A</displayUnits>
    		<displayDecPointLocation>0</displayDecPointLocation>
    	</binaryPointInteger>
    </type>
    Type est de type _di_IXMLDicttype défini comme cela par le data binding :
    typedef System:elphiInterface<IXMLDicttype> _di_IXMLDicttype;

    Je vais regarder les options dont tu parles !!!
    Je sais qu'on peut également cocher une case "generate document type", mais je ne l'ai pas cochée car je ne sais pas ce que ça m'apporte d'avoir des types ???
    merci !
    Pascale38

Discussions similaires

  1. Comment savoir quel élément à lancer l'événement ?
    Par Vanish dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 08/02/2007, 14h51
  2. [XML] XML Data Binding vers php
    Par noa dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 01/03/2006, 16h31
  3. Réponses: 3
    Dernier message: 22/02/2006, 11h23
  4. Réponses: 7
    Dernier message: 09/02/2006, 11h43
  5. comment savoir quel menu est en surbrillance?
    Par LRobi dans le forum MFC
    Réponses: 2
    Dernier message: 27/01/2005, 09h04

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