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 :

[XML] Lire un Argument avec SelectSingleNode


Sujet :

VBScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 64
    Points : 58
    Points
    58
    Par défaut [XML] Lire un Argument avec SelectSingleNode
    Bonjour,

    Le Fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?xml version="1.0" encoding="utf-8"?>
    <Archi>
       <Localisation Batiment="CAP15" Bat_Nom="CAP 15">
             <switch IP="123.45.6.789" Lieu="CAP15_4_BACK1"/>
             <switch IP="178.20.1.161" Lieu="CAP15_4_Dist"/>
             <switch IP="321.54.6.987" Lieu="CAP15_5_Dist1"/>
      </Localisation>
    </Archi>
    Le Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Set ObjXml = Createobject("Microsoft.XMLDOM")
    ObjXml.Async = False
    ObjXml.Load("Architecture.xml")
    MSGBOX ObjXml.DocumentElement.SelectSingleNode("//switch[@IP='178.20.1.161']")
    Réponse cherchée: CAP15_4_Dist

    La problématique :
    Je cherche à récupérer le "Lieu" dont l'IP est "178.20.1.161".
    Or la réponse rendue, avec mon code, est "espace" (si l'IP n'est pas bonne, la réponse est Nothing)
    Je ne sais pas comment coder ce SelectSingleNode pour aller chercher un argument.
    Tous les exemples touvés sur le Net montre la récupération de dépendance mais jamais d'un argument au même niveau.
    Serais-je obligé de passer par une boucle au lieu d'un accès direct ?

    Auriez-vous des suggestions.
    D'avance, merci pour votre peine.
    Cordialement.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Pour information, nous sommes dans la sous-section XML de la section Java. J'ignore quelle est cette syntaxe, j'imagine qu'un modo déplacera dans une section adéquate plus tard.

    Comme je ne connais ni la syntaxe ni l'API XML utilisée, je ne peux pas être 100% affirmatif, mais :

    #1
    - Ton code sélectionne un élément <switch> qui répond à certaines conditions.
    - Je suppose que MSGBOX affiche un texte.
    - Donc, à un moment donné, il y a transformation d'un élément en texte.
    - L'usage, en XML, pour transformer un élément en texte, est de concaténer tous les contenus textuels de l'élément et de ses descendants.
    - Tes éléments <script> sont tous vides. Ils ne contiennent aucun texte. Ils n'ont que des attributs.
    - Conclusion, la transformation en texte d'un script devrait être un texte vide. En fait, ça ne devrait pas être un espace, mais un texte de taille zéro.
    => Solution : ton API contient sûrement un moyen de lire les attributs d'un élément sélectionné.

    #2
    On peut faire plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "//switch[@IP='178.20.1.161']/@Lieu"
    Cette fois, c'est l'attribut Lieu du nœud répondant aux conditions, qu'on sélectionne.
    Sa transformation en texte devrait être son contenu, pile ce que tu veux.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 64
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Pour information, nous sommes dans la sous-section XML de la section Java. J'ignore quelle est cette syntaxe, j'imagine qu'un modo déplacera dans une section adéquate plus tard.
    Désolé, j'ai cherché XML et je n'ai pas vu que j'avais atterri chez vous.
    Ceci dit, le langage est du VBScript mais, à priori, cela ne rentre pas en ligne de compte car c'est du "XPath" donc, transparent (à 99%) quant au langage utilisé ... et si cela peut aider quelqu'un d'autre ...

    Ton explication en #1 est très claire, j'ai déjà mieux compris certaines choses. Merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    => Solution : ton API contient sûrement un moyen de lire les attributs d'un élément sélectionné.
    Oui, .Getattribute par exemple, mais (j'ai essayé) je n'arrive pas à l'utiliser avec SelectSingleNode (peut-être mauvais codage).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox ObjXml.DocumentElement.SelectSingleNode("//switch[@IP='178.20.1.161']").Getattribute("Lieu")
    .Getattribute fonctionne très bien avec SelectNodes (une équiv. de boucle)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //switch[@IP='178.20.1.161']/@Lieu"
    Cette fois, c'est l'attribut Lieu du nœud répondant aux conditions, qu'on sélectionne.
    Sa transformation en texte devrait être son contenu, pile ce que tu veux.
    AAAH, j'ai espéré très fort ... malheureusement (à priori) le / de /@Lieu est pris comme un dépendant (enfant) et non pas comme un argument.
    Snif
    Merci quand même.
    Cordialement.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 552
    Points : 21 608
    Points
    21 608
    Par défaut
    Citation Envoyé par AdD92 Voir le message
    Ceci dit, le langage est du VBScript mais, à priori, cela ne rentre pas en ligne de compte car c'est du "XPath"
    Pas que... Une fois que tu as sélectionné ton élément <switch> avec xPath, ce que tu vas en faire, genre le transformer en texte ou extraire ses attributs, ça devra s'exprimer dans le langage choisi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    => Solution : ton API contient sûrement un moyen de lire les attributs d'un élément sélectionné.
    Oui, .Getattribute par exemple, mais (j'ai essayé) je n'arrive pas à l'utiliser avec SelectSingleNode (peut-être mauvais codage).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox ObjXml.DocumentElement.SelectSingleNode("//switch[@IP='178.20.1.161']").Getattribute("Lieu")
    .Getattribute fonctionne très bien avec SelectNodes (une équiv. de boucle)
    Mouais. Ça me semblait pourtant logique. Un habitué de XML dans VBScript pourra peut-être démêler ça.

    Citation Envoyé par AdD92;5709932[code
    //switch[@IP='178.20.1.161']/@Lieu"
    Cette fois, c'est l'attribut Lieu du nœud répondant aux conditions, qu'on sélectionne.
    Sa transformation en texte devrait être son contenu, pile ce que tu veux.
    [/code]
    AAAH, j'ai espéré très fort ... malheureusement (à priori) le / de /@Lieu est pris comme un dépendant (enfant) et non pas comme un argument.
    Si tu me dis que ça marche pas dans ton environnement je te crois, mais la syntaxe xPath est correcte.
    En xPath et XSLT, les attributs d'un élément sont exprimés comme si c'était des enfants attributs, d'où nécessité du /
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 64
    Points : 58
    Points
    58
    Par défaut
    Si tu me dis que ça marche pas dans ton environnement je te crois, mais la syntaxe xPath est correcte.
    En xPath et XSLT, les attributs d'un élément sont exprimés comme si c'était des enfants attributs, d'où nécessité du /
    Rentré chez moi, au calme, j'ai refais le test.
    Ça marche
    Je pense (je suis sûr) que j'avais mal recodé le code.
    Le code correct ci-dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim ObjXml, Buffer
    Set ObjXml = Createobject("Microsoft.XMLDOM")
    ObjXml.Async = False
    ObjXml.Load("Architecture.xml")
    Set Buffer = ObjXml.DocumentElement.SelectSingleNode("//switch[@IP='178.20.1.161']/@Lieu")
    If Buffer Is Nothing Then
            Msgbox "vide"
    Else
            Msgbox Buffer.Text
    End If
    Msgbox ObjXml.DocumentElement.SelectSingleNode("//switch[@IP='178.20.1.161']/@Lieu").Text
    Ce qui est étonnant est l'utilisation du "/" dans ce cas.
    En effet, le "/" est utilisé pour les dépendants et le "@" pour les arguments de même niveau. L'utilisation des 2 ("/@") donne donc logiquement les attributs dépendants.
    Ton explication est très claire.
    J'ai vraiment appris quelque chose.

    Merci beaucoup. J'espère que cela pourra aider d'autres personnes.

    Cordialement.

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

Discussions similaires

  1. Impossible de lire un fichier XML avec SelectSingleNode
    Par aloisio11 dans le forum VB.NET
    Réponses: 8
    Dernier message: 06/10/2011, 16h40
  2. Parser du XML avec SelectSingleNode
    Par KoRiGaN44 dans le forum C#
    Réponses: 12
    Dernier message: 26/06/2009, 16h42
  3. Parser du xml avec SelectSingleNode
    Par GoTrUnKo dans le forum VB.NET
    Réponses: 2
    Dernier message: 16/01/2009, 11h52
  4. lire un fichier avec xml
    Par sorilazer dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 15/04/2007, 20h59

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