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

VBScript Discussion :

XPath SelectSingleNode ne renvoie rien


Sujet :

VBScript

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut XPath SelectSingleNode ne renvoie rien
    Bonjour,

    J'ai besoin de vos lumières pour comprendre un comportement bizarre de la méthode SelectSingleNode

    Tout d'abord, voici un extrait de mon fichier XML

    Code xml : 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
     
    <?xml version='1.0'?>
    <PX_ORDER_REQ_MSG>
    	<MsgData>
    		<Transaction>
    			<PX_ORDER_WRK class="R">
    				<PX_CUSTOMER_WRK class="R">
    					<ID IsChanged="Y">10000000</ID>
    					<ID_DR IsChanged="Y">XX</ID_DR>
    					<SEGMENT IsChanged="Y">P</SEGMENT>
    					<PX_CONSUMER_WRK class="R">
    						<FIRST_NAME IsChanged="Y">toto</FIRST_NAME>
    						<LAST_NAME IsChanged="Y">world</LAST_NAME>
    						<PX_TITLE IsChanged="Y">M</PX_TITLE>
    						<PX_TITLE_DESCR IsChanged="Y">Monsieur</PX_TITLE_DESCR>
    					</PX_CONSUMER_WRK>
    				</PX_CUSTOMER_WRK>
    			</PX_ORDER_WRK>
    		</Transaction>
    	</MsgData>
    </PX_ORDER_REQ_MSG>

    Je souhaite valider le contenu des champs de mon xml node par node, pour cela j'utilise la fonction selectSingleNode.

    Voici un extrait de mon code (j'espère ne rien oublier):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Set xmlDoc1 = CreateObject("Microsoft.XMLDOM")
    xmlDoc1.LoadXML(strFile)
    xmlDoc1.setProperty "SelectionLanguage", "XPath"
    If (xmlDoc1.selectsingleNode("//PX_ORDER_REQ_MSG") is nothing) Then
            msgbox "L'entrée en base ne correspond pas à un ordre"
    ElseIf (xmlDoc1.selectsingleNode("//MsgData") is nothing) Then
     	msgbox"pas de données disponible"
    Else
            Set messageNode = xmlDoc1.selectsingleNode("//MsgData") 
    	If messageNode is nothing Then
    		msgbox "pas de message dans la commande"
    	Else
    ...
    jusque là tout va bien,le node messageNode contient bien les données attendues c'est maintenant que ça devient bizarre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ...
    Set customerNode = messageNode.selectsingleNode("//PX_CUSTOMER_WRK")
    If customerNode is nothing Then
    	msgbox "Le node PX_CUSTOMER_WRK n'est pas présent"
    else
           msgbox " résultat: " & customerNode.text
    end if
    end if
    end if
    je n'ai pas le message "n'est pas présent" , donc a priori le node existe bien, mais il semble vide.

    d'un autre coté, le code suivant me renvoie correctement les données:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ...
    Set customerNode = messageNode.selectsingleNode("//Transaction//PX_CUSTOMER_WRK")
    If customerNode is nothing Then
    	msgbox "Le node PX_CUSTOMER_WRK n'est pas présent"
    else
           msgbox " résultat: " & customerNode.text
    end if
    end if
    end if
    Avez vous une idée?

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set customerNode = messageNode.selectsingleNode("//PX_CUSTOMER_WRK")
    je n'ai pas le message "n'est pas présent" , donc a priori le node existe bien, mais il semble vide.
    d'un autre coté, le code suivant me renvoie correctement les données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set customerNode = messageNode.selectsingleNode("//Transaction//PX_CUSTOMER_WRK")
    Il y a plein de choses bien critiquables généralement dans ce que vous montrez; mais sur le point précis que vous entendez faire, non, je ne pense pas, du tout. Est-ce que vous avez au début ou à quelque part la directrice "on error resume next" ? Enlevez-la et refaites le test ?

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Merci pour votre retour,

    Je n'ai pas d'instruction:
    'On error resume next'

    Pour le reste, pouvez vous développer les anomalies observées ?
    Qu'entendez-vous par "non, je ne pense pas, du tout."?

  4. #4
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Pour le reste, pouvez vous développer les anomalies observées ?
    Qu'entendez-vous par "non, je ne pense pas, du tout."? .
    Je veux dire simplement : pour un document exactement comme montré, avec les deux xpath //PX_CUSTOMER_WRK et //Transaction//PX_CUSTOMER_WRK, soit ils réussissez tous les deux, soit ils échouent tous les deux. Il est presque impensable que le dernier réussit et le premier échoue.

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Et pourtant cela se passe comme ça.

    Je vais clôturer la discussion car mon contournement fonctionne.

    Merci

  6. #6
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Je vous dirais ce que je pense: si le version de dll vous travaillez avec pour le progid microsoft.xmldom se comporte ainsi, je la méfie beaucoup plutôt de se satisfaire à un contourné comme décrit parce que c'est vraiment pas acceptable pour la longue terme. Ce n'est pas acceptable au point de vue de xpath, donc, on n'est pas sûr quel inattendu va venir.

    Moi, j'ai des versions à ma disposition avec les progid's :
    microsoft.xmldom
    msxml2.domdocument.3.0
    msxml2.domdocument.4.0
    msxml2.domdocument.5.0
    msxml2.domdocument.6.0
    sans parler les .net, aucun d'eux se comportent comme décrit.

    Je dirais vous télécharger un msxmlX.dll, à la préference msxml6.dll. N'utilisez plus Micosoft.XMLDOM, c'est bien loin daté. En vue que vous avez la ligne .SetProperty(), c'est plutôt Msxml2.DOMDocument que la source tuto a engagé, même pas 3.0, et probablement 6.0. Et c'est le dernier que je dirais vous devrez en profiter et de mettre à jour dans votre système.

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

Discussions similaires

  1. Fonction qui ne renvoie rien
    Par philippef dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/11/2006, 18h12
  2. [PostgreSql] requête simple qui ne renvoie rien ?
    Par tuxout dans le forum Langage SQL
    Réponses: 6
    Dernier message: 03/08/2006, 14h06
  3. fonction php qui ne me renvoie rien
    Par renaudjuif dans le forum Langage
    Réponses: 10
    Dernier message: 01/08/2006, 10h27
  4. Ma requête ne me renvoie rien
    Par dessinateurttuyen dans le forum Langage SQL
    Réponses: 8
    Dernier message: 24/07/2006, 17h42
  5. [SQL-Server] mssql_query ne renvoie rien !
    Par Sophy75 dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 06/04/2006, 10h59

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