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

Web & réseau Delphi Discussion :

Prise de tete avec xml


Sujet :

Web & réseau Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 71
    Points : 46
    Points
    46
    Par défaut Prise de tete avec xml
    Bonjour,
    J'ai une adresse pour récupérer un fichier xml qui me donne toutes les possibilités de mon appareil photo (serveur local de l'appareil photo). J'essaie d'exploiter ce XML en le mettant dans un TXMLDocument, mais quand je cherche un noeud que je sais exister, je ne trouve rien.
    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
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      HTTPClient:TIdHTTP;
      St:TStringStream;
      Response:String;
      XMLDocument:TXMLDocument;
      LNodeElement, LNode: IXMLNode;
    begin
      HTTPClient := TidHTTP.Create;
      St:=TStringStream.Create;
      try
        Response := HTTPClient.Get('http://192.168.122.1:64321/scalarwebapi_dd.xml');
        St.WriteString(Response);
        XMLDocument:=TXMLDocument.Create(nil);
        XMLDocument.LoadFromStream(St);//.FileName:='http://192.168.122.1:64321/scalarwebapi_dd.xm';
        XMLDocument.Active:=true;
        LNodeElement := XMLDocument.ChildNodes.FindNode('serviceId');
        memo1.Lines.Add(Response);
      finally
        HTTPClient.Free;
        St.Free;
        XMLDocument.Free;
      end;
    end;
    Je ne comprends vraiment pas. Merci de vos avis éclairés.
    Michel

  2. #2
    Membre confirmé Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Points : 477
    Points
    477
    Par défaut
    Salut,

    je en sais pas si c'est obligatoire mais tu peux ajouter le type d'encodage TXMLDocument.Encoding par exemple UTF8. Je ne suis pas sûre si le "loadFromStream" est capable de la mettre (pas moyen de regarder les sources pour le moment)

    Est-ce que ChildNodes te donne tous les nœuds du documents, ou bien seulement les nœuds enfant du root ?
    J'en avais il y a quelques temps, je me souviens que je devais parcourir l'arbre pour trouver le bon nœud. Mais il y a certainement des routines plus fonctionnelles maintenant. Tu es dans quelle version de Delphi ?

  3. #3
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 691
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 691
    Points : 13 121
    Points
    13 121
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LNodeElement := XMLDocument.DocumentElement.ChildNodes.FindNode('serviceId');

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 71
    Points : 46
    Points
    46
    Par défaut
    Je travaille avec Delphi 10.2
    Déja bizarrement il ne faut pas mettre XMLDocument:TXMLDocument mais XMLDocument:IXMLDocument sinon j'ai une erreur de pointer avec ChildNodes. Du coup je ne peux pas voir le contenu de XMLDocument au débogage.
    Sinon j'ai corrigé,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LNodeElement := XMLDocument.DocumentElement.ChildNodes.FindNode('serviceId');
    C'est toujours pareil, grrrrr
    Je vais être obligé de faire mon propre gestionnaire de XML :-(, l'horreur.
    Il doit bien y avoir un moyen de transférer une chaine string dans un TXMLDocument ?? Et ensuite d'explorer tranquillement.
    Merci de vos conseils?
    Pour l'instant mon code est:
    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
      HTTPClient:TIdHTTP;
      St:TStringStream;
      Response:String;
      XMLDocument:IXMLDocument;
      LNodeElement: IXMLNode;
    begin
      HTTPClient := TidHTTP.Create;
      St:=TStringStream.Create;
      try
        Response := HTTPClient.Get('http://192.168.122.1:64321/scalarwebapi_dd.xml');
        St.WriteString(Response);
        XMLDocument:=TXMLDocument.Create(nil);
        XMLDocument.LoadFromStream(St);//.FileName:='http://192.168.122.1:64321/scalarwebapi_dd.xm';
        XMLDocument.Active:=true;
        LNodeElement := XMLDocument.DocumentElement.ChildNodes.FindNode('UDN');
        memo1.Lines.Add(Response);
      finally
        HTTPClient.Free;
        St.Free;
    //    XMLDocument.Free;
      end;
    end;

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 299
    Points
    11 299
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    Avant le XMLDocument.LoadFromStream(St);, un St.Position := 0; ne change-t-il rien ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 691
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 691
    Points : 13 121
    Points
    13 121
    Par défaut
    Un exemple de fichier peut-être ...

  7. #7
    Membre confirmé Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Points : 477
    Points
    477
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    Bonjour,
    Avant le XMLDocument.LoadFromStream(St);, un St.Position := 0; ne change-t-il rien ?
    Je parie sur ta réponse, c'est un classique

  8. #8
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Si le nœud n'est pas directement sous la racine, tu ne le trouveras jamais avec cette méthode à moins de parcourir tous les nœuds.
    Mais tu peux utiliser XPath

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Node := XMlDocument.selectSingleNode('//serviceId');

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

Discussions similaires

  1. Feuille de style avec XML (pour expert !)
    Par jer_the_one dans le forum Composants VCL
    Réponses: 8
    Dernier message: 11/08/2004, 08h48
  2. Gestion de formulaire avec xml et sans serveur ?
    Par meliane dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 05/05/2004, 19h57
  3. Comment réaliser des modèles de documentations avec XML ?
    Par Dams76 dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 29/08/2003, 02h15
  4. Tree View avec XML et XSL
    Par Drooxy dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 22/04/2003, 10h21

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