SelectSingleNode avec variable
Bonjour,
- Bonne Année 2011 et Bonne Santé -
Une problématique récurente : l'insertion de variable(s) dans une instruction.
Précision : Le code est (doit être) en VBScript. Les réponses dans d'autres langages (VB, Net, ...) ne servent à rien.
L'instruction : SelectSingleNode (string).
La problématique :
- Si le "string" est codé "en dur", cela fonctionne impec.
- Si une partie du "string" est composé d'une variable, cela ne fonctionne pas.
En cause (interprétation perso.) : des guillemets mal interprétés (bug ?)
J'utilise l'EDI VBScript Factory et suit sous XP (bientôt sous Seven).
Diverses recherches sur le Net ne m'ont pas aidé à résoudre ce problème.
Certes, je pourrais utiliser SelectNodes avec un Do While, mais je suis têtu et veux utiliser SelectSingleNode.
Pourriez-vous m'aider à résoudre mon problème ?
D'avance, merci.
Cordialement.
Code:
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
|
Option Explicit '--- Permet d'éviter les erreurs "bêtes" c.a.d les noms des variables mal réécris (erreur de frappe)
Dim XmlAlerte, Node, Truc, Machin
Set XmlAlerte = Createobject("Microsoft.XMLDOM")
XmlAlerte.Async = False
XmlAlerte.Load("Alertes_source.xml")
Set Node = XmlAlerte.DocumentElement.SelectSingleNode("Composants/Obj_Type") ' ok
Msgbox "N01 " & Node.Text
Set Node = XmlAlerte.DocumentElement.SelectSingleNode("Composants[Obj_Type='Switch']") ' Ok
Msgbox "N02 " & Node.Text
Truc = "WM4"
Machin ="Composants[@Obj_Nom='" & Truc & "']"
Set Node = XmlAlerte.DocumentElement.SelectSingleNode(Machin)
' Msgbox "N03 " & Node.Text ==> sort en erreur
' ======> La variable Truc n'est pas prise en compte correctement
Set Node = XmlAlerte.DocumentElement.SelectSingleNode("Composants[@Obj_Nom='" & Truc & "']" )
If Node Is Nothing Then
Msgbox "N04 " & "vide"
Else
Msgbox "N04 " & Node.Text
End If
Set Node = XmlAlerte.DocumentElement.SelectSingleNode("Composants[@Obj_Nom='VM4']" ) ' Ok
If Node Is Nothing Then
Msgbox "N05 " & "vide"
Else
Msgbox "N05 " & Node.Text
End If
Set Node = XmlAlerte.DocumentElement.SelectSingleNode("Composants[@Obj_Nom='VM4']/Obj_Type") ' ok
If Node Is Nothing Then
Msgbox "N06 " & "vide"
Else
Msgbox "N06 " & Node.Text
End If |
Code:
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
|
<?xml version="1.0" encoding="utf-8"?>
<Alertes>
<Composants Obj_Nom="VM4">
<Obj_Type>Serveur</Obj_Type>
<Obj_Statut>Down</Obj_Statut>
<Obj_couleur>Rouge</Obj_couleur>
<Obj_NowOFF>21/12/2010 15:30:00</Obj_NowOFF>
<Obj_Cause>Serveur</Obj_Cause>
<Obj_Comment>Pas de réponse au Ping</Obj_Comment>
</Composants>
<Composants Obj_Nom="VM2">
<Obj_Type>Serveur</Obj_Type>
<Obj_Statut>Down</Obj_Statut>
<Obj_couleur>Rouge</Obj_couleur>
<Obj_NowOFF>21/12/2010 15:30:00</Obj_NowOFF>
<Obj_Cause>Serveur</Obj_Cause>
<Obj_Comment>Pas de réponse au Ping</Obj_Comment>
</Composants>
<Composants Obj_Nom="VM2S">
<Obj_Type>Serveur</Obj_Type>
<Obj_Statut>Down</Obj_Statut>
<Obj_couleur>Orange</Obj_couleur>
<Obj_NowOFF>21/12/2010 15:30:00</Obj_NowOFF>
<Obj_Cause>Serveur</Obj_Cause>
<Obj_Comment>Pas de réponse au Ping</Obj_Comment>
</Composants>
<Composants Obj_Nom="172.17.1.174">
<Obj_Type>Switch</Obj_Type>
<Obj_Statut>Down</Obj_Statut>
<Obj_couleur>Rouge</Obj_couleur>
<Obj_NowOFF>21/12/2010 15:30:00</Obj_NowOFF>
<Obj_Cause>Inondation</Obj_Cause>
<Obj_Comment>Installation sous l'eau</Obj_Comment>
</Composants>
</Alertes> |