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

XSL/XSLT/XPATH XML Discussion :

[ASP] DOM selectSingleNode et Xpath


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 34
    Points : 29
    Points
    29
    Par défaut [ASP] DOM selectSingleNode et Xpath
    Bonjour !

    Je sèche depuis un moment sur un problème dans l'utilisation du DOM dans une page asp pour afficher des données XML :

    La méthode SelectSingleNode permet de récupèrer un noeud XML de cette manière en asp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set objNode= objXML.selectSingleNode("Xpath_Expression")
    Cela marche en effet très bien lorsque mon expression Xpath est de type

    a/b/c

    ou même avec des prédicats sur les attributs par exemple

    a[@id="5"]/b/c

    en revanche dès que je mets une indication sur la position du noeud (dans le cas ou plusieurs répondent aux critères) comme

    a[@id="5"]//b/c[2] forme simplifiée de a[@id="5"]//b/c[position()=2]

    alors là ça ne marche plus (objNode est vide...)
    Bizarre non ?

    Quelqu'un pourrait-il m'aider ?

    merci d'avance,

    Matt

    [Modéré par GrandFather - Ajout du tag dans le titre]

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 34
    Points : 29
    Points
    29
    Par défaut
    'ai trouvé la solution au problème.
    Je pense d'ailleurs qu'il s'agit d'une erreur de l'implémentation de la methode selectSingleNode() du DOM, dans MSXML du moins. Enfin ça reste à vérifier.
    Je m'explique :

    Prenons ce fichier xml.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0"?>
    <ROOT>
    	<ITEM libelle="menu1" />
    	<ITEM libelle="menu2" />	
    </ROOT>
    Et executons le fichier asp.asp suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <%@ Language=VBScript %>
    <%
    Dim objXML
    	set objXML= Server.CreateObject("MSXML2.DOMDocument.3.0")
    	objXML.async = false
    	objXML.load server.MapPath("test.xml")
    Dim objNode
    	Set objNode=objXML.documentElement.SelectSingleNode("ITEM[1]")
     
    	Response.write objNode.getAttribute("libelle")
    %>
    A votre avis qu'est ce qu'on va avoir en sorti : "menu1" ou "menu2"

    La réponse est "menu2", pour avoir "menu1" il aurait fallu faire SelectSingleNode("ITEM[0]")

    Or en Xpath l'indexation des positions est censée commencer à 1 et non à 0 !!
    ITEM[1] est l'abréviation de ITEM[position()=1] qui est censé correspondre au 1ER noeud ITEM sous le noeud contextuel.
    C'est en tout cas ce qui se passe quand on écrit une requete Xpath dans XSL.

    La MSDN à propos de SelectSingleNode dit :

    "var objXMLDOMNode = oXMLDOMNode.selectSingleNode(queryString);
    Where queryString is a string SPECIFYING AN XPATH EXPRESSION."
    c'est faux ! il s'agit d'une pseudo expression Xpath où l'indexation des position commence à 0 et non à 1 comme le définis Xpath.

    J'ai perdu pas mal de temps avec ce problème et s'il s'avère que l'erreur vient bien de microsoft, je serai vraiment furax.

    Enfin dans tous les cas, je vous le dit pour pas que quelqu'un d'autre perde du temps là dessus.

    Matthieu.

  3. #3
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Tsss....
    Toi tu n'as pas du faire une grosse recherche sur ce forum pas la premiere fois que je reponds a cela
    Il te manque une option dans le code que tu donnes car Xpath n'est pas le langage par defaut d'un selectnodes
    avant de faire une un selectnodes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ton_objetDom.setProperty "language","XPath"
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set objNode=objXML.SelectSingleNode("//ITEM[1]")
    Serait mieux.
    Je n'ai pas eu le temps de verifier ton code avec cette correction, mais cela t'evitera beacoup de deconvenue

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 34
    Points : 29
    Points
    29
    Par défaut
    Merci Erwy,
    j'avais pourtant fais une recherche sur le forum avant de poser la question, ce que je fais toujours mais là je n'avais rien trouvé... peut être pas assez "grosse" la recherche ?

    En effet tu as raison, ça marche impec avec
    ton_objetDom.setProperty "language","XPath"
    mais pourquoi donc est-il spécifier sur la msdn que selectSingleNode requiert (par défaut) un chaîne Xpath en argument.
    Et surtout pourquoi ne font-ils pas référence au choix du langage "Xpath" ou "XSLPattern" (je viens de l'apprendre !) dans l'article sur selectSingleNode (http://msdn.microsoft.com/library/de...singlenode.asp) !!?

    Je dois pas être un as en recherche...
    Enfin ça marche, merci j'avais trouvé une alternative mais je préfère comme ça. Et pourquoi tu ne me l'as pas dit pus tôt !?

  5. #5
    Membre confirmé
    Avatar de strat0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2003
    Messages : 288
    Points : 598
    Points
    598
    Par défaut
    Je remonte ce vieux message (qui cartonne dans google avec certains mots clefs) pour préciser que chez moi, en VbScript pur (pas ASP), ça fonctionne en mettant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ton_objetDom.setProperty "SelectionLanguage","XPath"
    Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ton_objetDom.setProperty "language","XPath"

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

Discussions similaires

  1. Dans quels cas choisir entre SAX, DOM, JAXB, ou XPath ?
    Par anubiiis dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 06/04/2009, 08h14
  2. [DOM] Utilisation d'Xpath
    Par Yoshio dans le forum Bibliothèques et frameworks
    Réponses: 17
    Dernier message: 23/08/2007, 14h33
  3. ASP DOM XML (Bloc notes)
    Par totoche dans le forum ASP
    Réponses: 2
    Dernier message: 08/11/2006, 17h14
  4. [ASP]DOM dans un string
    Par cuber dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 19/06/2006, 11h20
  5. [ASP][DOM] Récupérer les éléments d'un XML
    Par Tikate dans le forum XML/XSL et SOAP
    Réponses: 7
    Dernier message: 03/05/2006, 11h51

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