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 :

MSXML6, XPath et Delphi


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Points : 6
    Points
    6
    Par défaut MSXML6, XPath et Delphi
    Bonjour

    J'ai quelques soucis de requête XPath via la dll MSXML6 ; le tout sous Delphi XE. Je ne parviens pas à comprendre.

    Voici mon xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <project xmlns="http://developpez.net">
      <categories>
        <category name="C1" label="Category n°1" />
    </categories>
    </project>
    Je cherche le noeud "category" dont l'attribut "name" a une certaine valeur (C1).

    Et voici le type de code Delphi qui me sert à tester. Il fonctionne "comme prévu" jusqu'à la ligne 23 comprise : le noeud "categories" est bien trouvé. Les lignes suivantes renvoient toutes une valeur "nil".

    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
     
    procedure Test();
    const
      C_XML=
        '<?xml version="1.0" encoding="ISO-8859-1"?> '+
        '<project xmlns="http://developpez.net"> '+
        '  <categories>'+
        '    <category name="C1" label="Category n°1" />'+
        '  </categories>'+
        '</project>';
      C_Namespace='xmlns:fm="http://developpez.net"';
    var
      Doc: IXMLDOMDocument2;
      rNode_Categories,rNode_Category: IXMLDOMNode;
      i: Integer;
    begin
      Doc := CoDOMDocument60.Create;
      try
        Doc.async := false;
        Doc.loadxml(C_XML);
        Doc.setProperty('SelectionNamespaces',C_Namespace);
     
        rNode_Categories := Doc.documentElement.SelectSingleNode('fm:categories');
     
        rNode_Category := rNode_Categories.selectSingleNode('/*[@name=''C1'']');
        rNode_Category := rNode_Categories.selectSingleNode('/*[@fm:name=''C1'']');
        rNode_Category := rNode_Categories.selectSingleNode('/fm:*[@name=''C1'']');
        rNode_Category := rNode_Categories.selectSingleNode('/fm:*[@fm:name=''C1'']');
     
        rNode_Category := rNode_Categories.selectSingleNode('/*[@name="C1"]');
        rNode_Category := rNode_Categories.selectSingleNode('/*[@fm:name="C1"]');
        rNode_Category := rNode_Categories.selectSingleNode('/fm:*[@name="C1"]');
        rNode_Category := rNode_Categories.selectSingleNode('/fm:*[@fm:name="C1"]');
     
      finally
        Doc := nil;
      end;
    end;
    J'ai suspecté d'éventuels problèmes de simple ou double quotes ; de namespace (j'ai bien défini ma propriété 'selectionNamespaces'), de langage...

    A ce propos, le débuggeur de Delphi pète un cable : la ligne 23 executée me renvoie bien un pointeur non "nil". En revanche, si j'évalue la ligne (CtrL+F7), la valeur retournée est ... nil.

    Si quelqu'un a une idée, merci d'avance

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 42
    Points : 51
    Points
    51
    Par défaut
    ceci devrait mieux marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        rNode_Categories := Doc.documentElement.SelectSingleNode('./fm:categories');
        rNode_Category := rNode_Categories.selectSingleNode('./fm:*[@name=''C1'']');
    ..par contre faut pas me demander le pourquoi du . devant
    je sait juste que ça marche mieux avec.

    si quelqu'un a une explication, je prends !

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2011
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Merci, ca marche nickel \o/

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

Discussions similaires

  1. Différences entre Delphi et Visual Basic ?
    Par Anonymous dans le forum Débats sur le développement - Le Best Of
    Réponses: 75
    Dernier message: 30/03/2009, 20h09
  2. [XPATH] DELPHI / MSXML problème d'utilisation
    Par görgh dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 07/01/2009, 12h16
  3. Xml, XPath+xmlns+delphi : problème
    Par bip98 dans le forum Composants VCL
    Réponses: 9
    Dernier message: 28/05/2008, 13h48
  4. Réponses: 4
    Dernier message: 27/03/2002, 11h03
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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