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

XML/XSL et SOAP Discussion :

Problème de lecture XML en vbscript


Sujet :

XML/XSL et SOAP

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Problème de lecture XML en vbscript
    Bonjour,

    Je suis débutant mais persévérant.
    En me promenant sur ce site, j'ai découvert comment écrire un vbsript pour lire un fichier xml et en écrire un autre. J'ai donc réalisé quelques essais concluants, mais j'ai un cas précis ou je n'arrive à rien.

    Etant donc néophyte, je me heurte à présent à ce même problème en voulant extraire des données XML d'un fichier pour les réécrire dans un autre XML, toujours en vbscript.
    Vous trouverez ci-joint le XML initial et la destination.
    Je n'ai laissé qu'une ligne sur le XML initial, mais je peux en avoir plusieurs.
    Dans le XML destination, j'y ai mis deux lignes (pour l'exemple).

    Voici les balises dont je souhaite récupérer les valeurs :
    itmOrgData
    vOrgDataType = POS
    vOrgDataValue
    vOrgDataType = ITM
    vOrgDataValue
    vVendorArticleNo aStatus="O">UYLD189</vVendorArticleNo>
    vOrderQuantity
    itmPricing
    vConditionType = TNET
    cConditionValue
    itmText
    vTextType = ARTS
    vTextContent aTextLineNo
    itmText
    vTextType = ARTL
    vTextContent aTextLineNo
    itmConfiguration
    vOpionID = …
    vValueText ID = …
    Fichiers attachés Fichiers attachés

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Et c'est quoi la différence entre ce cas précis et les cas que tu as déjà essayés ? Où est le code ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 6
    Points : 2
    Points
    2
    Par défaut La différence ??? la voici
    En fait, mes deux premiers vbscripts reprennent des informations de l'entête du document. Les informations sont uniques et les balises aussi.

    Ici, je suis dans le corps du XML ou je dois récupérer plusieurs lignes.
    Ensuite, il ne s'agit pas uniquement de trouver une balise, mais de trouver un noeud "balise" avec un certain "paramétrage", puis de descendre dans le XML pour trouver une autre balise qui correspond au noeud trouvé en question, avec lui aussi une autre variable, et enfin de reprendre une dernière balise avec sa valeur (bref, une recherche à la manière des poupée russes).

    Une fois les infos récupérées, je passe au noeud suivant, etc.

    C'est bien plus complexe pour moi.

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Simplification
    Bon, je reprends ma demande :
    Voici le vbscript que j'ai écrit :

    Set xmlDoc = CreateObject("Microsoft.XMLDOM")
    xmlDoc.Async = "false"
    xmlDoc.Load("XML_initial.xml")

    For Each Lignes In xmlDoc.selectNodes("/itmOrgData")
    For Each POS In vOrgDataType = Lignes.getAttribute("POS")

    vOrgDataValue = POS.selectSingleNode("vOrgDataValue").text

    next
    next
    MsgBox "vOrgDataValue: " & vOrgDataValue
    ' "ITM : " & ITM & vbcrlf & _
    ' "ITEMNO : " & ITEMNO

    Set xmlDoc = Nothing

    Dans mon fichier XML, je cherche à extraire la valeur de vOrgDataValue si vOrgDataType = POS.
    Le script se lance, mais mon messagebox affiche un résultat à blanc.
    Le fichier XML d'origine est toujours joint ici.
    Merci de m'aider, je suis pommé là.

  5. #5
    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
    [0] Il faut être clair: personne ne puisse comprendre de quoi vous parlez...
    vOrgDataType = POS
    vOrgDataValue
    vOrgDataType = ITM
    vOrgDataValue
    vVendorArticleNo aStatus="O">UYLD189</vVendorArticleNo>
    ...
    Ce n'est pas comme ça qu'on résume un document xml.

    [1] Et puis, le script vbs est tellement incorrect même sur le plan syntactique pour ne pas dire la logique d'intention... Ce n'est peut-être pas un très grand langage vbs mais il command tout de même un peu de respect: il faut l'apprendre et apprendre bien pour l'utiliser. Et il fait ses besognes exceptionnellement bien.

    [2] Je ne peux pas vous prendre la main tout au long: je ne peux que vous montrer un script en modifiant le vôtre qui contient un grand nombre d'éléments bien nécessaire de savoir, vbs et xml.
    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
    'Set xmlDoc = CreateObject("Microsoft.XMLDOM")
    Set xmlDoc=CreateObject("msxml2.domdocument")
    xmlDoc.setProperty "SelectionLanguage", "XPath"    'case sensitive
    'xmlDoc.Async = "false"
    xmlDoc.Async = false
    'xmlDoc.Load("XML_initial.xml")
    bret=xmlDoc.Load("XML_initial.xml")
    if bret then
        For Each Lignes In xmlDoc.selectNodes("//itmOrgData")
            For Each POS in Lignes.selectNodes("vOrgDataType")
                if POS.text="POS" then
                    set node=POS.selectSingleNode("following-sibling::vOrgDataValue")
                    if not(node is nothing) then
                        MsgBox node.text
                    end if
                end if
            Next
        Next
    end if
     
    'MsgBox "vOrgDataValue: " & vOrgDataValue 
    ' "ITM : " & ITM & vbcrlf & _ 
    ' "ITEMNO : " & ITEMNO 
     
    Set xmlDoc = Nothing
    Ce n'est pas efficace d'apprendre vbs avec xml. Mais l'inverse? c'est un peu mieux. Avec tous les deux à apprendre en même temps? c'est presque insouhâitable.

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Merci

    Bon, voilà, j'ai travaillé sur le sujet cet après-midi et j'ai découvert plein de choses.
    Le correctif que vous m'apportez m'apporte encore des réponses.
    Je vais maintenant tenter d'ajouter encore des informations pour terminer ce que j'essaye de faire.
    Et oui, je suis débutant et je fait bien des erreurs, mais j'apprends progressivement.
    Encore merci pour le coup de pouce.

  7. #7
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Nouveau problème

    Et voilà, je me heurte encore à un soucis.
    Le code que vous m'avez donné fonctionne à merveille.
    J'ai cependant un nouveau problème.
    Je teste la balise POS puis ITM
    Si POS existe dans la section et pas ITM, je souhaite écrire un texte fixe pour remplacer la valeur de ITM.
    Par contre si POS puis ITM existe, je reprend la valeur de ITM.
    Je planche là dessus depuis hier soir et j'en ai mal dormis.
    Décidément, je me sent nul.
    Maintenant je suis certain qu'il y a ici des cadors qui seront m'aiguiller.

Discussions similaires

  1. Problème de lecture XML
    Par yougoudai dans le forum C#
    Réponses: 2
    Dernier message: 26/02/2010, 15h59
  2. Problème de lecture XML
    Par bip98 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 13/05/2008, 12h09
  3. [SAX] Problème de lecture xml à la volée
    Par zuzuu dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 10/01/2007, 09h28
  4. [DOM4J] Problème de lecture de fichier xml avec dom4j
    Par santana2006 dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 05/04/2006, 16h52
  5. Problème de lecture dans un fichier xml
    Par Pyra dans le forum Langage
    Réponses: 2
    Dernier message: 18/12/2005, 00h13

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