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

Composants VCL Delphi Discussion :

Xml, XPath+xmlns+delphi : problème


Sujet :

Composants VCL Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Xml, XPath+xmlns+delphi : problème
    Bonjour
    J'ai un problème.. le voici..

    J'ai ce fichier :

    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
     
    <?xml version="1.0" encoding="UTF-8"?>
     <kml>
      <Document>
       <name>hollande.kml</name>
       <LookAt>
         <longitude>8.84951614383266</longitude>
         <latitude>54.9296676053168</latitude>
         <altitude>5000</altitude>
         <rang>5000</rang>
         <tilt>0</tilt>
         <altitudeMode>RelativeToGround</altitudeMode>
      </LookAt>
    <Style id="route">
     <LineStyle>
       <color>D80000FF</color>
       <width>4</width>
     </LineStyle>
     </Style>
    <Placemark>
     <styleUrl>#route</styleUrl>
     <name>VirtualBikePath</name>
     <visibility>1</visibility>
     <LineString>
        <tessellate>1</tessellate>
        <coordinates>8.84951614383266,54.9296676053168,0.0420476804603833
    8.84947705966923,54.9297642750836,0 </coordinates>
     </LineString>
    </Placemark>
    </Document>
    </kml>
    Mon code en delphi est utilisé pour obtenir le champ <coordinates>

    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
     
    function TXmlDatas.ReturnPointOnString(FileName  : String {In} ): String;
    var
      //Node      : IXMLNode;
      Node : IDOMNode;
     
    begin
      //Ouvre le fichier kml
      FXMLDoc.LoadFromFile(FileName);
      //Valide le fichier XML
      FXMLDoc.Active:=true;
     
      //Recherche en Xpath avec Dom.
      Node := (FXMLDoc.DOMDocument as IDOMNodeSelect).SelectNode('//coordinates/text()');
      if Assigned(Node) then
      begin
        //Retourne toutes les coordonnées
        ReturnPointOnString:=Node.nodeValue;
      end;
      FXMLDoc.Active:=False;
    end;
    Cela fonction parfaitement ! Mais quand je veux changer la balise <kml> en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <kml xmlns="http://earth.google.com/kml/2.0">
    Plus rien ne fonction ! Pourquoi ??

  2. #2
    Membre averti

    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
    Points : 441
    Points
    441
    Par défaut
    Tu utilises quoi pour parser ton xml ? MSXML, omniXML, ou le TXMLDocument ?

  3. #3
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 290
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 290
    Points : 1 941
    Points
    1 941
    Par défaut
    J'ai trouvé ça:
    http://www.pluralsight.com/blogs/kei.../19/15714.aspx, les commentaires donne une solution pour gérer avec les namespaces, le reste de l'article est une bidouille pour enlever les namespaces, mais ce n'est pas propre.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    J'utilise IXMLDocument

    Pour la solution d'enlever les namespaces c'est bizard ! A mon avis il doit y avoir une autre solution ! J'ai essayé 2-3 trucs mais rien ne fonctionne !
    Sinon je prendrai celle la.. !
    mais une autre solution serait la bien venue !

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Une solution peut-être, d'après ce que j'ai lu, serait d'utiliser un IXMLDOMDocument2 et d'affecter le NameSpace via la méthode setProperty et en lui donnant en premier paramètre "SelectionNamespaces" et en second le nom du NameSpace.

  6. #6
    Membre averti

    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
    Points : 441
    Points
    441
    Par défaut
    Je pencherais plus pour IXMLDOMDocument3, moi, de l'API msxml6.

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    D'après la MSDN c'est disponible depuis la 2 mais bon ce qui est valable pour la 2 et valable pour la 3.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Aie dur !!

    J'utilise IXMLDocument, en intergrant la lib MSXML y'a tout le reste qui fonctionne plus du (ce genre la):

    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
     
      //Ouvre le fichier kml
      FXMLDoc.LoadFromFile(FileName);
      //Valide le fichier XML
      FXMLDoc.Active:=true;
      //Recherche LineStyle
      Node:=FXMLDoc.ChildNodes['kml'].ChildNodes.Nodes['Document']
                   .ChildNodes.Nodes['Style'].ChildNodes.Nodes['LineStyle'];
     
      //Change la couleur et la taille de la ligne directrice
      Node.ChildNodes['color'].Text:=ColorLine;
      Node.ChildNodes['width'].Text:=IntToStr(WithLine);
     
      //Sauvegard le fichier Kml.
      FXMLDoc.SaveToFile(FileName);
      FXMLDoc.Active:=False;
    Je voudrais bien pourvoir utilisé IXMLDOMDocument2 mais je devrais retaper des heures de codes ! Vous savez comment je peux contourner cela ?

  9. #9
    Membre averti

    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
    Points : 441
    Points
    441
    Par défaut
    Normalement le code ne devrait pas changer...
    Tu as mis quoi dans tes uses ?

    Pour utiliser IXMLDOMDocument2 (ou 3), il te faut la dll msxml4, ou 6.
    Ensuite tu dois "l'importer" (je ne me souviens plus du terme exact). Delphi va alors te générer un fichier nommé MSXML2_TLB.pas.

    Et comme IXMLDOMDocument est une interface, théoriquement ton code ne doit pas être changé

  10. #10
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 290
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 290
    Points : 1 941
    Points
    1 941
    Par défaut
    Il y a une interface IXMLDocument de Delphi que n'est pas la même que celle de Microsoft (dans XmlIntf sur Delphi7):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    {$IFDEF MSWINDOWS}
    { MSXML.H defines another IXMLDocument and references the type...
      The compiler must see this before it sees the IXMLDocument
      introduced in this unit - otherwise, references will cause
      ambiguity errors }
    (*$HPPEMIT '#include <msxml.h>' *)
    {$ENDIF}

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/09/2009, 12h29
  2. [XML-XPATH] Problème dans un for each
    Par stailer dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 26/12/2005, 12h11
  3. Réponses: 2
    Dernier message: 11/05/2005, 13h23
  4. Réponses: 5
    Dernier message: 18/03/2005, 20h10
  5. [delphi] problème d'eclairage
    Par Dr@ke dans le forum OpenGL
    Réponses: 4
    Dernier message: 26/02/2005, 14h17

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