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

Delphi Discussion :

Probleme dans mon code recherche dans un fichier Xml


Sujet :

Delphi

Vue hybride

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 76
    Par défaut Probleme dans mon code recherche dans un fichier Xml
    Bonsoir,
    Je viens de faire un code pour cibler un noeux ce code est exécuté lors d'un onChange sur un combobox(CB_Id_Expert).

    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
     
    procedure TFenetre_termite.XMLExpert();
      var noeux: IXMLNode;
    begin
      noeux := XMLDocument1.DocumentElement;
      noeux := noeux.ChildNodes['expert'] ;
      if assigned(noeux) then
        begin
          if noeux.Attributes['Id'] = CB_Id_Expert.Text then
            begin                          
     
    MiseJourExpert(noeux.ChildNodes['nom'].Text,noeux.ChildNodes['prenom'].Text,noeux.ChildNodes['raison'].Text,noeux.ChildNodes['adresse'].Text,noeux.ChildNodes['codepostal'].Text,noeux.ChildNodes['commune'].Text,noeux.ChildNodes['assurance'].Text,noeux.ChildNodes['NBpolice'].Text);
     
            end
          else
            begin
              noeux := noeux.NextSibling;
            end;
        end;
    end;
    Dans un premier temps la fonction devrait trouver directement car elle tombe directement sur le bon noeud mais rien ne se passe.
    Puis je voulais faire une boucle mais je tombe sur un problème peut ton savoir le nombre de noeux qui existe du nom de expert.

    Je vous mets le fichier xml


    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <root>
    	<Expert id='de'>
    		<nom>deder</nom>
    		<prenom>fred</prenom>
    		<raison>LandRConsultants</raison>
    		<adresse>DS 309 -1,rue de l'arpajonnais</adresse>
    		<codepostal>91160</codepostal>
    		<commune>Saulx les chartreux</commune>
    		<assurance>SIACI</assurance>
    		<NBpolice>0066099</NBpolice>
    	</Expert>
     
    </root>

  2. #2
    Membre expérimenté

    Profil pro
    Enseignant
    Inscrit en
    Juillet 2003
    Messages
    296
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2003
    Messages : 296
    Par défaut
    Tu gères ton document XML avec quoi ? OmniXML ou MSXML ?

    Néanmoins, je peux répondre à la seconde question. Tu peux récupérer une liste de nodes via Xpath et la fonction SelectNodes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var 
      nodes : IXMLNodeList;
      i := Integer;
    begin
      //Utilisation de la requête Xpath pour sélectionner le nom de chaque Expert
      nodes := xmlDoc.SelectNodes('//Expert/nom'); //xmlDoc : IXMLDocument
      for i:=0 to nodes.Length-1 do cbb1.Items.Add(nodes.Item[i].Text); //cbb1 : TComboBox;
    end;
    J'utilise une vieille version de omniXML, il faudra donc adapter un peu en fonction du parser utilisé.

    Une pist pour ton premier problème, c'est l'utilisation de la fonction similaire à SelectNodes, mais pour choisir un seul noeud : SelectSingleNode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var node : IXMLNode;
    begin
      node := xmlDoc.SelectSingleNode('//Expert/@id="'+cbb1.Text+'"');
     ...
    end;
    Petite explication : la requête Xpath est du genre 'Expert/@id="de"', qui va donc sélectionner le premier noeud (théoriquement le seul) 'Expert' possédant l'attribut id qui vaut "de" (@ désigne un attribut dans Xpath).

    J'espère avoir répondu à tes questions, mais si il y a toujours un problème, n'hésite pas

    edit : J'ai été trop vite...
    J'ai remarqué après coup que tu voulais lister les ID des experts, et pas leur nom...
    La requête Xpath à utiliser dans le SelectNodes n'est pas "//Expert/nom" mais "//Expert/@id", qui va donc lister tous les attributs 'id' des experts

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 76
    Par défaut
    merci beaucoup j'essaie dessuite. A oui j'utilise MSXML car je ne sais pas du tout ou trouver omni xml sinon je serais partant pour l'utiliser

  4. #4
    Membre expérimenté

    Profil pro
    Enseignant
    Inscrit en
    Juillet 2003
    Messages
    296
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2003
    Messages : 296
    Par défaut
    Dans la partie Composants du site, je suppose que omniXML doit s'y trouver.

    Sinon, tu pourras t'aider du tuto que j'ai écrit sur MSXML et Delphi ici.

    Je trouve personnellement que OmniXML est plus simple d'emploi.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 76
    Par défaut
    merci beaucoup je regarde , j'essaie et si tout est bon je marque de resolu merci encore

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 76
    Par défaut
    Encore une petite question est t'il possible que mon probleme ne fonctionne pas car j'utilise le composant XMLDocument ?
    Car Le SelectNodes est compris comme un identifiant non déclaré ....
    dsl d'etre un peu lourd

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

Discussions similaires

  1. [Débutant] Renommer fichier [Probleme dans mon code]
    Par mindhavok dans le forum VB.NET
    Réponses: 0
    Dernier message: 26/10/2011, 10h30
  2. erreur dans mon code ecriture dans un fichier
    Par baderahmed dans le forum ASP.NET
    Réponses: 4
    Dernier message: 11/10/2010, 17h55
  3. [DOM] java.lang.ClassCastException dans un code qui modifie un fichier XML
    Par RouRa22 dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 21/12/2007, 16h21
  4. [VBA-E]Probleme dans mon code ??? merci de votre aide
    Par gregantibes dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/04/2006, 18h24
  5. Réponses: 5
    Dernier message: 25/04/2004, 00h57

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