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

VB.NET Discussion :

Impossible de lire un fichier XML avec SelectSingleNode


Sujet :

VB.NET

  1. #1
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    306
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 306
    Points : 71
    Points
    71
    Par défaut Impossible de lire un fichier XML avec SelectSingleNode
    Bonjour à tous,

    J'ai un fichier XML qui à cette structure
    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
    26
    27
    28
    29
    30
    31
    32
    33
    <?xml version="1.0" encoding="UTF-8"?>
    <ep xmlns="http://www-bb.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://www.bb.com/export/ep_export_format_products_0.5.xsd">
      <information>
        <export>
    		[...]
        </export>
        <settings>
    		[...]
        </settings>
      </information>
      <product>
        <product-id>0017185</product-id>
        <ean>10942101239</ean>
        <name locale="de">F 386 00</name>
        <name locale="fr">F 386 00</name>
        <name locale="it">F 386 00</name>
        <manufacturer>
    		<name>Krups</name>
    		<manufacturer-product-id>F38600</manufacturer-product-id>
        </manufacturer>
      </product>
      <product>
        <product-id>0017186</product-id>
        <ean>10942101239</ean>
        <name locale="de">F 999 11</name>
        <name locale="fr">F 999 11</name>
        <name locale="it">F 999 11<name>
        <manufacturer>
    		<name>Sony</name>
    		<manufacturer-product-id>F99911</manufacturer-product-id>
        </manufacturer>
      </product>
     </ep>
    Je veux lire chaque <product>, car il y en a des milliers, et récupérer les infos de chaque produit.
    Le problème est que je n'arrive pas à utiliser cette fonction SelectSingleNode

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    vXml.Load(Application.StartupPath & "\products.xml")
     
    vListeNoeud = vXml.DocumentElement.GetElementsByTagName("product")
     
    For vCpt = 0 To vListeNoeud.Count - 1
    	vNoeudArt = vListeNoeud.Item(vCpt)
     
    	'Récuéperation de la marque
    	vMarque = vNoeudArt.SelectSingleNode("//product/manufacturer/name")
    Next
    vNoeudArt.SelectSingleNode("//product/manufacturer/name") me donne "nothing"
    vNoeudArt.SelectSingleNode("/manufacturer/name") me donne "nothing"

    J'ai tout essayé et je ne trouve rien.

    Pour info ce n'est pas moi qui génère le fichier XML.

    Comment faire pour lire mon fichier ?

    Merci d'avance

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Ce serait plus facile avec Linq to XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Dim doc = XDocument.Load(fileName)
     
        For Each nameElement in doc.<ep>.<product>.<manufacturer>.<name>
            Dim vMarque As String = nameElement.Value
            ...
        Next

  3. #3
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    306
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 306
    Points : 71
    Points
    71
    Par défaut
    j'ai oublié de préciser ... je suis en en VB.NET 2003

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    il faut indiquer un "chemin relatif" par rapport à l'élément courant : "manufacturer/name" (j'ai testé et ça marche)

    Avec un chemin absolu ça va toujours prendre le premier élément qui correspond par rapport à la racine.

  5. #5
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    306
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 306
    Points : 71
    Points
    71
    Par défaut
    Ca ne fonctionne pas pour moi

    Ça me renvoie "Nothing"
    Même si je mets juste "ean" pour avoir l'EAN, ça me renvoie la même chose ...

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Ah ok, c'est à cause du namespace (xmlns="http://www-bb.com")

    Il faut utiliser un XmlNamespaceManager :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Dim nsmgr As New XmlNamespaceManager(vXml.NameTable)
        nsmgr.AddNamespace("ns", "http://www-bb.com")
     
         ...
     
         vMarque = vNoeudArt.SelectSingleNode("ns:manufacturer/ns:name", nsmgr)

  7. #7
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    306
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 306
    Points : 71
    Points
    71
    Par défaut
    Merveilleux :-)

    Merci beaucoup ;-)

    Juste une dernière question qui n'a rien à voir avec le problème :
    Comment faire, en partant de vXml, pour trouver le "ean" du "product-id" 0017186 ?

    Merci d'avance

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
        Dim productElement = vXml.DocumentElement.SelectSingleNode("ns:product[ns:product-id='0017185']", nsmgr)
        Dim eanElement = productElement.SelectSingleNode("ns:ean", nsmgr)

  9. #9
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    306
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 306
    Points : 71
    Points
    71
    Par défaut
    Merci pour tout c'est vraiment sympa de ta part

    Bonne continuation

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

Discussions similaires

  1. Impossible de lire un fichier xml après un déploiement avec Click Once
    Par cyberjo23 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 26/11/2009, 16h04
  2. Lire un fichier XML avec VBA
    Par Mouse dans le forum Général VBA
    Réponses: 1
    Dernier message: 15/06/2006, 19h56
  3. [XML] lire un fichier xml avec php
    Par java_fun dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 31/03/2006, 12h21

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