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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    306
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 306
    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 : 43
    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
    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 éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    306
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 306
    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 : 43
    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
    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 éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    306
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 306
    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 : 43
    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
    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)

+ 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