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

Langage Delphi Discussion :

Comment récupérer la valeur d'un noeud d'un fichier XML ?


Sujet :

Langage Delphi

  1. #1
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    mai 2002
    Messages
    2 614
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2002
    Messages : 2 614
    Points : 6 147
    Points
    6 147
    Par défaut Comment récupérer la valeur d'un noeud d'un fichier XML ?
    Comment récupérer la valeur d'un noeud d'un fichier XML ?

    Je me suis inspiré de la faq (https://delphi.developpez.com/faq/?p...ud-par-son-nom), mais j'obtiens l'erreur suivante lors de l'appel à ma sous-procédure récursive RechercheNoeud :
    Le projet xxx.exe a déclenché la classe d'exception EInvalidPointer avec le message 'Opération de pointeur incorrecte'.
    Appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
             XMLDocument := TXMLDocument.Create(nil);
             try
                XMLDocument.LoadFromFile(ChangeFileExt(szProjet, '.dproj'));
                XMLDocument.Active := True;
                Result := RechercheNoeud(XMLDocument.DocumentElement, NoeudRecherche, 0);      // << Appel de la sous-procédure.
                ...
             finally
                XMLDocument.Free;
             end;
    Sous-procédure :
    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
    function RechercheNoeud(Noeud: IXMLNode; NoeudRecherche: TStringList; const nNiveau: Integer): String;
    var
       i: Integer;
    begin
       Result := '?';
       if Assigned(Noeud) then
       begin
          if Noeud.NodeType = ntElement then
          begin
             if Noeud.NodeName = NoeudRecherche[nNiveau] then
             begin
                if nNiveau < Pred(NoeudRecherche.Count) then
                begin
                   if Noeud.HasChildNodes then
                   begin
                      for i:=0 to Pred(Noeud.ChildNodes.Count) do
                         Result := RechercheNoeud(Noeud.ChildNodes.Nodes[i], NoeudRecherche, (nNiveau + 1))
                   end;
                end
                else
                   Result := Noeud.Text;
             end;
          end;
       end;
    end;
    J'ai mis un point d'arrêt au début de la sous-procédure, mais je n'y arrive même pas.
    J'ai testé de mettre nil en premier paramètre, et ça ne plante plus. Ça ne fait plus rien, mais ça prouve bien que c'est lui le pb.
    Qu'est ce que j'ai mal fait ?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. Écrivez dans un français correct !!

    Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise
    OpenGL 2.1 - Oracle 10g - Interbase (7 - XE) - PostgreSQL 11.6

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Profil pro
    Inscrit en
    septembre 2008
    Messages
    5 119
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : septembre 2008
    Messages : 5 119
    Points : 11 217
    Points
    11 217
    Par défaut
    Et XMLDocument est bien déclaré en IXMLDocument ?
    Sans propriétaire, c'est une interface qui est retournée au Create.

  3. #3
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    mai 2002
    Messages
    2 614
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2002
    Messages : 2 614
    Points : 6 147
    Points
    6 147
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Et XMLDocument est bien déclaré en IXMLDocument ?
    Sans propriétaire, c'est une interface qui est retournée au Create.
    Bien vu !
    C'était juste ça. Maintenant, ça marche.

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. Écrivez dans un français correct !!

    Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise
    OpenGL 2.1 - Oracle 10g - Interbase (7 - XE) - PostgreSQL 11.6

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

Discussions similaires

  1. [Débutant] récupérer valeur d'un noeud d'un fichier XML
    Par waspy59 dans le forum C#
    Réponses: 10
    Dernier message: 02/12/2016, 17h36
  2. Récupérer le nom d'un noeud dans un fichier xml
    Par amirad dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 01/06/2009, 18h20
  3. [DOM] Modifier la valeur d'un noeud dans un fichier XML
    Par rob2-9 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 25/08/2008, 20h31
  4. [DOM] Récupérer le nom du premier noeud d'un fichier XML en PHP
    Par ePsymon dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 08/02/2008, 09h17
  5. Récupérer les valeurs d'un noeud dans un fichier XML
    Par yosthegost dans le forum Delphi
    Réponses: 1
    Dernier message: 30/05/2006, 17h38

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