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 :

Comment lire les "Attributes" en XML ?


Sujet :

Delphi

  1. #1
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut Comment lire les "Attributes" en XML ?
    Bonjour,

    Voici un exemple de fichier :
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    - <GSurf>
    <Utilisateur>prenom.nom</Utilisateur>
    <Machine>SERVICE-XXX</Machine>
    <IP>XX.X.X.XXX</IP>
    - <Historique>
    <Visite id="14" horaire="13/03/2007 08:26:06" url="http://java.sun.com/update/1.5.0/map-1.5.0.xml" />
    <Visite id="15" horaire="13/03/2007 08:26:07" url="http://javadl-esd.sun.com/update/1.5.0/map-1.5.0.xml" />
    <Visite id="16" horaire="13/03/2007 08:26:07" url="http://javadl-esd.sun.com/update/1.5.0/1.5.0_10-b03.xml" />
    <Visite id="17" horaire="13/03/2007 08:26:08" url="http://jal.sun.com/webapps/installstat/CountryLookup" />
    </Historique>
    </GSurf>
    Je voudrais lire mon fichier XML, voici mon code :
    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
     
    XML := TXMLDocument.Create(Self);
    XML.Active := true;
    XML.Version := '1.0';
    XML.Encoding := 'ISO-8859-1';
    XML.LoadFromFile(OpenDialog1.FileName);
    with XML.ChildNodes.Nodes['GSurf'].ChildNodes do
    begin
         Utilisateur := Nodes['Utilisateur'].Text;
         Machine := Nodes['Machine'].Text;
         IP := Nodes['IP'].Text;
         with Nodes['Historique'].ChildNodes do
         begin
              Horaire := Nodes['Visite'].Attributes['Horaire'];
              Url := Nodes['Visite'].Attributes['Url'];
         end;
    end;
    XML.Active := false;
    XML.Free;
    J'ai un plantage au niveau de la lecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Horaire := Nodes['Visite'].Attributes['Horaire'];
    11:42:15 -> Impossible de convertir le variant de type (Null) en type (String)
    Je comprends pas pourquoi j'ai cette erreur...

    Avez-vous une idée ?

    Merci,
    ZiP

  2. #2
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut
    Citation Envoyé par [ZiP]
    Bonjour,
    ...
    Je comprends pas pourquoi j'ai cette erreur...

    Avez-vous une idée ?

    Merci,
    ZiP
    Oui c'est simplement que l'attribut est vide (Null) et donc qu'il est impossible à convertir en string

    Si tu as des attributs non obligatoires, il faut d'abord tester la présence de l'attribut avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if Nodes['Visite'].HasAttribute('Horaire') then
      Horaire := Nodes['Visite'].Attributes['Horaire']
    [Edit]
    Essaie de mettre 'horaire' avec un h minuscule comme dans ton xml
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  3. #3
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonjour,

    En fait, je viens de trouver le problème...

    Il fait la différence entre les majuscules et minuscules !

    Merci,
    ZiP

  4. #4
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par [ZiP]
    Bonjour,

    En fait, je viens de trouver le problème...

    Il fait la différence entre les majuscules et minuscules !
    Oui, j'ai édité trop tard mon précédent message

    Citation Envoyé par [Zip]
    Merci,
    ZiP
    Mais avec plaisir
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  5. #5
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    J'ai un autre petit soucis.

    Comment puis-je faire pour lire en boucle toutes mes lignes <Visite xxx /> ?

    Parce que là, il semble me lire qu'une seule ligne

    Merci,
    ZiP

  6. #6
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Rhoo un p'tit coup de f1 t'aurait donné la solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    with Nodes['Historique'].ChildNodes do
    if Count > 0 then
    for i := 0 to Count - 1
    if Child[i].LocalName = 'Visite' then
    begin
      Horaire := Child[i].Attributes['Horaire'];
      Url := Child[i].Attributes['Url'];
    end;
    Code à vérifier
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  7. #7
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonjour,

    Merci de m'avoir mis sur la voie

    Voici le code rectifié et fonctionnel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                             if Count > 0 then
                             begin
                                  for i:=0 to Count-1 do
                                  begin
                                       if Nodes[i].LocalName = 'Visite' then
                                       begin
                                            Horaire := Nodes[i].Attributes['horaire'];
                                            Url := Nodes[i].Attributes['url'];
    Merci,
    ZiP

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

Discussions similaires

  1. Comment lire les attributs "hide" d'une table en VBA
    Par fredlefou dans le forum Access
    Réponses: 1
    Dernier message: 28/01/2008, 01h30
  2. Réponses: 5
    Dernier message: 20/08/2002, 18h01

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