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 :

[D6 => XML] Récupération de données dans une balise


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 79
    Points : 34
    Points
    34
    Par défaut [D6 => XML] Récupération de données dans une balise
    Bonjour.
    Voila j'essaie de lire un fichier XML et j'essaie de récuperer des donnée de celui-ci.
    voici sa structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <aaa>
       <bbb>
          <ccc>donnée 1</ccc>
          <ddd ss:type='donnée 2'/>
       </bbb>
    </aaa>
    La donnée 1 pas de problème.
    par contre la donnée 2 je n'arrive pas.
    Pourriez-vous m'eclairer ?

    PS : Le "ss:" est present dans de nombreux endroit du fichier. savez-vous a quoi il correspond ?

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    bonjour,

    il manque /ddd :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <aaa>
    <bbb>
    <ccc>donnée 1</ccc>
    <ddd ss:type='donnée 2'/ddd>
    </bbb>
    </aaa>
    Sauf erreur, "ss:" correspond au schema XML (fichier .xsd).

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2005
    Messages : 67
    Points : 102
    Points
    102
    Par défaut
    bonjour,

    ton exemple de fichier xml est sans doute un extrait.
    J'ai pris ça pour tester :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <ss:aaa xmlns:ss='http://bidon'>
       <bbb>
          <ccc>donnée 1</ccc>
          <ddd ss:type='donnée 2'/>
       </bbb>
    </ss:aaa>
    et dans un onclick d'un bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    procedure TForm1.BLoadClick(Sender: TObject);
    var
       data1, data2 : string;
       nodebbb : IXMLNode;
    begin
         XMLDoc.LoadFromFile('test.xml');
         nodebbb := XMLDoc.DocumentElement.ChildNodes[0];
         data1 := nodebbb.ChildNodes.Nodes['ccc'].NodeValue;
         data2 := nodebbb.ChildNodes.Nodes['ddd'].Attributes['ss:type'];
         memo.Clear;
         memo.Lines.Add('data1 : '+data1);
         memo.Lines.Add('data2 : '+data2);
    end;
    pour le 'ss', je ne suis pas spécialiste mais va voir du coté des namespace dans les fichier xml

    bon surf !!

  4. #4
    Membre émérite
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Points : 2 614
    Points
    2 614
    Par défaut
    Citation Envoyé par Graffito
    bonjour,

    il manque /ddd :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <aaa>
    <bbb>
    <ccc>donnée 1</ccc>
    <ddd ss:type='donnée 2'/ddd>
    </bbb>
    </aaa>
    Ceci est faux.

    tu ecris soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <balise>ici la valeur</balise>
    soit si tu n'as pas de valeur qui est l'équivalent de donc dans le cas proposé,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <aaa>
    <bbb>
    <ccc>donnée 1</ccc>
    <ddd ss:type='donnée 2'/>
    </bbb>
    </aaa>
    est parfaitement juste. C'est juste une balise sans valeur avec un attribut.

  5. #5
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    Citation Envoyé par Graffito
    Sauf erreur, "ss:" correspond au schema XML (fichier .xsd).
    Bin, il y a erreur...
    ss: correspond à un espace de nom, pas à un shéma XML.

    Ceci dit, la réponse est bien donnée par nihao.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 79
    Points : 34
    Points
    34
    Par défaut
    Merci pour ses reponses mais adaptant cela a mon code ca marche pas ...

    Je vous monstre les valeur exacte que je dois recup :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
      <?xml version="1.0" ?> 
    - <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:sc="http://www.spigao.com/scribe">
    + <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
      <Author>xxxxxxx</Author> 
            ...
      <Version>10.2625</Version> 
      </DocumentProperties>
    + <CustomDocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
      <NomStd dt:dt="string">SARTY2</NomStd> 
        ...
      </CustomDocumentProperties>
    + <Styles>
      <Style ss:ID="Default" ss:Name="Normal" /> 
    - <Style ss:ID="s21">
      <Alignment ss:Vertical="Top" /> 
      <Borders /> 
      <Font ss:Size="9" /> 
      <Interior /> 
      <NumberFormat /> 
      <Protection /> 
      </Style>
    ....
      </Styles>
    + <Names>
      <NamedRange ss:Name="EURO" ss:RefersTo="=6.55957" /> 
      <NamedRange ss:Name="TVA" ss:RefersTo="=0.196" /> 
      </Names>
    - <Worksheet ss:Name="SARTY2">
    + <Names>
      <NamedRange ss:Name="Title" ss:RefersTo="R1C2" /> 
                 ...
      <NamedRange ss:Name="L_0_53" ss:RefersTo="=SARTY2!R233" /> 
      </Names>
    - <Table ss:ExpandedColumnCount="6" ss:ExpandedRowCount="233" x:FullColumns="1" x:FullRows="1" ss:StyleID="s21" ss:DefaultColumnWidth="60">
      <Column ss:StyleID="s22" ss:AutoFitWidth="0" ss:Width="45.75" /> 
    ....
    - <Row ss:AutoFitHeight="0" ss:Height="36">
    - <Cell ss:Index="2" ss:StyleID="s23">
      <Data ss:Type="String">DEPARTEMENT DES HAUTS DE SEINE</Data> 
      <NamedCell ss:Name="Title" /> 
    + <Comment>
      <ss:Data>Numéro du dossier : 569291</ss:Data> 
      </Comment>
      </Cell>
      <sc:ILM sc:Name="1" sc:Type="T" sc:Level="0" /> 
      </Row>
    voila en rouge ce sont les données que je dois récuperer.
    Les info dans <Data> j'y arrive comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      nodeXml := XMLDoc.ChildNodes.Nodes['Workbook'].ChildNodes.Nodes['Worksheet'].ChildNodes.Nodes['Table'].ChildNodes.Nodes['Row'];
      data := nodeXml.ChildNodes['Cell'].ChildNodes['Data'].NodeValue;

  7. #7
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vType := nodeXml.ChildNodes['Cell'].ChildNodes['sc:ILM'].AttributesNodes['sc:Type'].NodeValue;
    Ca fonctionne ?

  8. #8
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 79
    Points : 34
    Points
    34
    Par défaut
    oui ca me prend bien la 1ere donnée (apres de devrai bouclé)

  9. #9
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 79
    Points : 34
    Points
    34
    Par défaut
    Non ca marche pas.
    meme en aillant corriger l'erreur de AttributeNode (pas de S ^^).
    meme en enlevent le childNodes['Cell'] (car il est pas dans cell sc:ILM)

    Ma variable TypeD renvoie un resultat Null.

  10. #10
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2005
    Messages : 67
    Points : 102
    Points
    102
    Par défaut
    essaye ça :

    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
     
    procedure TForm1.BLoadClick(Sender: TObject);
    var
       data1, data2 : string;
       scuri : widestring;
       node,node1,node2 : IXMLNode;
    begin
         XMLDoc.LoadFromFile('test.xml');
         node := XMLDoc.DocumentElement;
         scuri := node.FindNamespaceURI('sc');
         node := node.ChildNodes['Worksheet'].ChildNodes['Table'].ChildNodes['Row'];
         data1 := node.ChildNodes['Cell'].ChildNodes['Data'].NodeValue;
         node2 := node.ChildNodes.FindNode('ILM',scuri);
         data2 := node2.GetAttributeNS('Type',scuri);
    end;

  11. #11
    Nouveau membre du Club
    Inscrit en
    Octobre 2005
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 79
    Points : 34
    Points
    34
    Par défaut
    Merci infiniment !!!!
    ca marche !!!!!

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

Discussions similaires

  1. Récupération de données dans une URL
    Par sissi25 dans le forum Langage
    Réponses: 2
    Dernier message: 21/01/2007, 19h23
  2. [MySQL] Problème de récupération des données dans une fonction
    Par highman dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/10/2006, 20h04
  3. Récupération de données dans une popup de modification
    Par Sandara dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 14/06/2006, 16h03
  4. [D6 => XML] Récupération de données avec une boucle.
    Par Bason_sensei dans le forum Delphi
    Réponses: 1
    Dernier message: 23/05/2006, 13h50
  5. Problème de récupérations de données dans une table mysql
    Par Helpine dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 09/03/2006, 19h07

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