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

Composants VCL Delphi Discussion :

Lire une liste XML


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Mai 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 10
    Par défaut Lire une liste XML
    bonjour,
    Je me décide à poster ce messsage car je rencontre un problème avec une structure XML que je dois lire sous delphi
    en effet je n'ai trouvé aucun exemple de structure semblable a celle ci :

    <xat version="1" xmlns="http://www.mon-url.net/xsd/xat2/1">
    <date-envoi format="yyyy-MM-dd HH:mm:ss">2008-05-22 09:54:26</date-envoi>
    <uri-service-list>
    <uri-service action="Display">http://www.mon-url.net/SINERES/xataff</uri-service>
    <uri-service action="TestSessionFlow">http://www.mon-url.net/SINERES/xattsf</uri-service>
    <uri-service action="SessionShuttle">http://www.mon-url.net/SINERES/xatshtl</uri-service>
    <uri-service action="ManageSession">http://www.mon-url.net/SINERES/xatsess</uri-service>
    </uri-service-list>
    </xat>


    Une fois que j'ai reçu cette réponse par xml je dois lire l'url d'un service à interroger
    exemple
    le service TestSessionFlow qui est plublié à l'URL http://www.mon-url.net/SINERES/xattsf dans le XML chargé dans mon composant TXMLdocument

    Comment fait on sous delphi avec une telle structure de document XML ??

    Si qquun a la solution ..merci ..je me gratte la tête depuiS un bon moment déjà....

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 093
    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 093
    Par défaut
    Regarde le composant TXMLDocument, l'aide explique commennt parcourir les ChildNodes\Nodes (uri-service-list, uri-service, ...) et les Attributes (action, format, ...), je n'ai pas d'exemple simple sous la main

    sinon avec une version Entreprise, regarde l'Expert Liaison de données XML, il te construira automatiquement un mapping interface\object implement avec des IXLMNode qui est très facile ensuite à manipuler
    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 habitué
    Inscrit en
    Mai 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 10
    Par défaut
    J'ai passé la journée a étudier l'aide a regarder tout les cours trouvés sur le web et sur developpez.com avant de poster cette dernière bouteille a la mer
    (je suis débutant dans la manipulation du xml mais pas en delphi avec qui je développe depuis 97)

    Donc, sans être un expert j'arrive bien a manipuler une structure xml classique avec un Txmldocument sans problème mais ici le problème est qu'il y a plusieurs noeuds uri-service avec plusieurs attributs et que je dois accéder la la valeur (l'url) de chaque attribut : comment accéder a l'url en fonction de la valeur d'un attribut ?
    ....apparemment personne ne sait ...
    j'ai bien peur de devoir me construire mon propre analyseur de balises XML
    car je ne trouve pas de méthode le permettant sur le Txmldocument ..je ne sais pas si c'est du XML classique (j'ai un delphi 7 entreprise)

    <uri-service-list>
    <uri-service action="Display">http://www.mon-url.net/SINERES/xataff</uri-service>
    <uri-service action="TestSessionFlow">http://www.mon-url.net/SINERES/xattsf</uri-service>
    <uri-service action="SessionShuttle">http://www.mon-url.net/SINERES/xatshtl</uri-service>
    <uri-service action="ManageSession">http://www.mon-url.net/SINERES/xatsess</uri-service>
    </uri-service-list>
    </xat>

    concernant l'expert de liaison j'ai un peu regardé mais cela ne semble pas convenir a mon utilisation : en effet dans mon projet il s'agit d'interfacer mon logiciel (delphi win32) avec un site qui dialogue en http a coup de get et de post de formulaires XML (plus de 200 définis ) donc un peu dur a gérer avec l'expert de liaison. Je suis donc en cours de développement d'une ISAPI en delphi 7 qui dialogue selon ce protocole ...

    showmessage(XMLDocument1.ChildNodes.Nodes['xat'].ChildNodes['uri-service-list'].ChildNodes['uri-service'].attributes['action']);

    me retourne uniqement 'display' qui est le nom du premier attribut du premier enregistrement de la collection <uri-service>
    comment obtenir les autres TestSessionFlow,SessionShuttle...et surtout comment obtenir l'URL de ces noeuds en fonction de la valeur de ces attributs ?
    merci

  4. #4
    Membre habitué
    Inscrit en
    Mai 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 10
    Par défaut
    Merci ShaileTroll...j'ai un peu approfondi la question de l'expert de liaison XML et effectivement avec cette solution je parviens a résoudre mon probleme (a part que cela me génére autoant do'bjjet et d'unité qu'il y a de format XML a explotier avec autant de déclaration d'objets alors que je ne travaillais j'usqu'ici qu'avec une classe de comm faite maison et un txmldocument mais bon..)
    En exploitiant ce que me contruit l'expert de liaison XML le code suivant fait ce que je souhaite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var Vxat2: IXMLXat2Type;
        i : integer;
    begin
     XMLDocument1.Active:=true;
     Vxat:=Getxat2(XMLDocument1);
     for i:=0 to (vxat.Uriservicelist.Count)-1 do begin
     showmessage(vxat.Uriservicelist.Uriservice[i].Action); //display....
     showmessage( vxat.Uriservicelist.Uriservice[i].Text) //les url qui  m'interressent
    end;

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    En fait pour moi l'idée, sans passer par l'expert de liaison XML, serait de parcourir les ChildNodes de uri-service-list non pas par leur nom mais par leur indice soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for Cpt := 0 to XMLDocument1.ChildNodes.Nodes['xat'].ChildNodes['uri-service-list'].ChildNodes.Count - 1 do
      ShowMessage( XMLDocument1.ChildNodes.Nodes['xat'].ChildNodes['uri-service-list'].ChildNodes[Cpt].attributes['action'] );
    end;

  6. #6
    Membre habitué
    Inscrit en
    Mai 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 10
    Par défaut
    merci c'est exactement ce qu'il me fallait ...ce qui me manquais c'est que je ne savait pas comment parcourir les noeuds d'une liste par leur indice

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     if ( XMLDocument1.ChildNodes.Nodes['xat2'].ChildNodes['uri-service-list'].ChildNodes[Cpt].attributes['action'] )='TestSessionFlow' then
        ShowMessage( XMLDocument1.ChildNodes.Nodes['xat2'].ChildNodes['uri-service-list'].ChildNodes[Cpt].Text);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SP-2007] lire une liste de fichier infopath comme bdd
    Par benneb dans le forum SharePoint
    Réponses: 3
    Dernier message: 23/11/2009, 08h52
  2. Réponses: 0
    Dernier message: 11/02/2008, 18h01
  3. mapper une liste xml dans un fichier Excel.
    Par maa dans le forum Excel
    Réponses: 1
    Dernier message: 21/08/2007, 15h42
  4. [AJAX] retourner et lire une liste avec ajax
    Par _momo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/08/2007, 15h13
  5. Réponses: 2
    Dernier message: 22/09/2006, 08h33

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