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 :

XML Lecture du fichier


Sujet :

VB.NET

  1. #1
    Invité
    Invité(e)
    Par défaut XML Lecture du fichier
    Bonjour

    Je rencontre quelques soucies pour traiter mon fichier xml

    j'ai trouvé des sources me permettant de la parcourir grâce a la librairie System.Xml, toutefois je ne peut rien faire de très avancé, en effet j'aimerais parcourir des noeuds se trouvant dans un autre.

    Pour étre plus clair
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <alpha>
        <beta>
            <teta>lorem</teta>
            <teta>ipsum</teta>
        </beta>
        <beta>
            <teta>dolor</teta>
            <teta>sit</teta>
        </beta>
    </alpha>

    en fait a l'heure actuelle je peut afficher le contenu des noeuds teta, et ce consécutivement
    Dernière modification par tomlev ; 27/01/2011 à 18h11.

  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 : 44
    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
    Citation Envoyé par Isamov Voir le message
    en fait a l'heure actuelle je peut afficher le contenu des noeuds teta, et ce consécutivement
    J'ai rien compris... tu nous dis ce que tu peux faire actuellement, mais pas ce que tu veux faire... on n'a pas de boule de cristal, essaie d'être précis

  3. #3
    Invité
    Invité(e)
    Par défaut
    argh désolé, quand j'ai trop le nez dans le guidon je ne me rend compte

    j'aimerais pouvoir pour un noeud connaitre le nombre de noeud qu'il contient, ex : combien le noeud beta contient-il de noeuds (bon deux de toutes évicences mais comme le contenue de mon xml varie...)

  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 : 44
    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
    Tu peux faire quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Dim doc As New XmlDocument()
        doc.Load(fileName)
        Dim beta As XmlElement = CType(doc.SelectSingleNode("/alpha/beta"), XmlElement)
        Dim elementsCount As Integer = beta.GetElementsByTagName("*").Count
    Si tu travailles avec .NET 3.5 ou plus, tu peux utiliser Linq to XML, c'est nettement plus facile...

  5. #5
    Invité
    Invité(e)
    Par défaut
    en effet ton code fonctionne correctement, mais mon contexte est légèrement différent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?xml version="1.0" encoding="UTF-8"?>
    <office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0">
    	<table:table-row table:style-name="ro1">
    		<table:table-cell office:value-type="string"><text:p>alpha</text:p></table:table-cell>
    		<table:table-cell office:value-type="string"><text:p>béta</text:p></table:table-cell>
    		<table:table-cell office:value-type="string"><text:p>téta</text:p></table:table-cell>
    		<table:table-cell office:value-type="date" office:date-value="1412-04-01"><text:p>23/03/12</text:p></table:table-cell>
    	</table:table-row>
    </office:document-content>
    ci dessus un échantillon du code xml que je manipule, j'ai essayé d'adapter ton code en utilisant XPathNodeIterator mais pour l'instant sans succés

  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 : 44
    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 ouais, quand y a des namespaces c'est un peu plus galère...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        Dim doc As New XmlDocument()
        doc.Load(fileName)
     
        Dim mgr As New XmlNamespaceManager(new NameTable())
        mgr.AddNamespace("office", "urn:oasis:names:tc:opendocument:xmlns:office:1.0")
        mgr.AddNamespace("table", "????") ' je sais pas trop d'où il sort celui là...
     
        Dim row As XmlElement = CType(doc.SelectSingleNode("/office:document-content/table:table-row", mgr), XmlElement)
        Dim cellCount As Integer = row.GetElementsByTagName("table:table-cell").Count

  7. #7
    Invité
    Invité(e)
    Par défaut
    en fait a la base je cherche a lire un .ods, ce qui explique la tête de ce xml

    bon je continue d'essayer d'adapter ron code

  8. #8
    Invité
    Invité(e)
    Par défaut
    tas raison c'est galére
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0">
    	<table:table-row table:style-name="ro1">alpha</table:table-row>
    	<table:table-row table:style-name="ro1">beta</table:table-row>
    	<table:table-row table:style-name="ro1">teta</table:table-row>
    </office:document-content>
    j'arrive pas a déclaré table dans mon addNamespace

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonjour, les Namespaces sont les suivants, sauf erreur :
    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
    <?xml version="1.0" encoding="utf-8"?>
    <office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
                             xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
                             xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0">
      <table:table-row table:style-name="ro1">
        <table:table-cell office:value-type="string">
          <text:p>alpha</text:p>
        </table:table-cell>
        <table:table-cell office:value-type="string">
          <text:p>béta</text:p>
        </table:table-cell>
        <table:table-cell office:value-type="string">
          <text:p>téta</text:p>
        </table:table-cell>
        <table:table-cell office:value-type="date" office:date-value="1412-04-01">
          <text:p>23/03/12</text:p>
        </table:table-cell>
      </table:table-row>
    </office:document-content>

  10. #10
    Invité
    Invité(e)
    Par défaut
    tu n'as pas fait d'erreur

    toutefois les caractères spéciaux ne sont pas gérés
    dans mon catch je récupère :
    Il existe un caractère non valide dans l'encodage donné. Ligne 84, position 60.
    sachant que je ne peut pas modifier mon xml, comment puis je passé outre ce soucis ?
    Dernière modification par Deepin ; 28/01/2011 à 15h37. Motif: Balises [QUOTE]...[/QUOTE]

  11. #11
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    J'ai trouvé ça sur MSDN, mais il faut le FW 3.5 minimum, je crois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            Dim reader As XmlReader = _
            XmlReader.Create(Application.StartupPath & "\AlphabetGrec.xml")
            Dim root As XElement = XElement.Load(reader)
            Dim nameTable As XmlNameTable = reader.NameTable
            Dim namespaceManager As XmlNamespaceManager = New XmlNamespaceManager(nameTable)
            namespaceManager.AddNamespace("office", "urn:oasis:names:tc:opendocument:xmlns:office:1.0")
            namespaceManager.AddNamespace("table", "urn:oasis:names:tc:opendocument:xmlns:table:1.0")
            namespaceManager.AddNamespace("text", "urn:oasis:names:tc:opendocument:xmlns:text:1.0")
     
            Dim row As XElement = root.XPathSelectElement("./table:table-row[@table:style-name='ro1']", namespaceManager)
            Dim cellCount As Integer = row.Elements.Count
    il va chercher le table-row qui a l'attribut que tu lui indiqueras.
    Par contre si tu ne peux importer tous les Namespaces dans ton XML, je pense que VS refusera de le traiter, car mal formé, à voir.

  12. #12
    Invité
    Invité(e)
    Par défaut
    le post ci dessus c'est pour solutionné le problème de caractères spéciaux ? ou pour le parcours du xml ?

  13. #13
    Invité
    Invité(e)
    Par défaut
    en fait mon problémes de caractéres spéciaux se produit ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim doc As New XmlDocument()
    doc.Load(pathXml)
    lors de mon load j'ai le message d'erreur décris plus haut, bon là je cherche quelle méthode appliqué pour qu'il accepte les caractères spéciaux, mais si quelqu'un a une idée avant moi

  14. #14
    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 : 44
    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
    Essaie comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim doc As New XmlDocument()
    Using reader As New StreamReader(pathXml, Encoding.UTF8)
        doc.Load(reader)    
    End Using
    Si ça ne marche pas, essaie de mettre Encoding.Default à la place de UTF8

  15. #15
    Invité
    Invité(e)
    Par défaut
    malheureusement ça ne fonctionne pas

    reader est souligné et j'ai droits au message :
    La résolution de surcharge a échoué, car aucun New accessible ne peut être appelée avec ces arguments...
    et avec le Encoding.Default j'ai sensiblement le même message
    Dernière modification par Deepin ; 28/01/2011 à 17h28. Motif: Balises [QUOTE]...[/QUOTE]

  16. #16
    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 : 44
    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
    La résolution de surcharge a échoué, car aucun New accessible ne peut être appelée avec ces arguments...
    Euh... pourtant le constructeur en question existe

    Il te manquerait pas un Imports System.IO ?

  17. #17
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Ma réponse précédente était pour la recherche du noeud choisi et savoir combien il a d'enfant.
    Pour l'encodage, si tu as la possibilité de modifier la première ligne par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" encoding="ISO-8859-1"?>
    , pour simplement voir si ça passe au Load du fichier XML.

  18. #18
    Invité
    Invité(e)
    Par défaut
    là je viens de trouver qqchose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                Dim doc As New XmlDocument()
                Using reader As New StreamReader(pathXml)
                    System.Text.Encoding.UTF8.ToString()
                    doc.Load(reader)
                End Using
    je suis en train de voir si je peut correctement l'exploité

    ps : oui j'ai bien mon Imports System.IO en début de classe

  19. #19
    Invité
    Invité(e)
    Par défaut
    bon et bien ça ne bug plus , mais quand j'affiche le contenue de mon xml
    (le mot héllo pour l'exemple) ça affiche


    comment décoder ceci ?

  20. #20
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    et avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Text.Encoding.GetEncoding("iso-8859-1")
    Ca dit quoi ?

Discussions similaires

  1. [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, 17h52
  2. VA lors de lecture du fichier XML
    Par LN(a) dans le forum Langage
    Réponses: 6
    Dernier message: 15/09/2005, 00h43
  3. [vb.net][xml] probleme de lecture de fichier
    Par graphicsxp dans le forum Windows Forms
    Réponses: 4
    Dernier message: 27/07/2005, 12h51
  4. Lecture de fichier au format XML ??
    Par nico0007 dans le forum Langage
    Réponses: 1
    Dernier message: 07/07/2005, 16h40
  5. [C#] [XML] Lecture d'un fichier XML => Combobox
    Par Chad`Chiwa dans le forum Windows Forms
    Réponses: 8
    Dernier message: 09/03/2005, 09h57

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