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 :

Parccourir un XML et de recuperer ses elements un par un


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 138
    Par défaut Parccourir un XML et de recuperer ses elements un par un
    Salut;
    j'ai un Fichier XML F1qui est dans un StringWriter
    qui a cette structure :
    Code xml : 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
    <Racine>
     
    <p1>
    <id>A1A</id>
    <nom>Gauch</nom>
    <prenom>Alain</prenom>
    </p1>
     
    <p1>
    <id>B12</id>
    <nom>Brad</nom>
    </p1>
     
    <p1>
    <id>C14</id>
    <nom>Clark</nom>
    <prenom>Jack</prenom>
    <adresse>blabla</adresse>
    </p1>
     
    </Racine>

    ce que je veux c'est de parccourir mon XMl et de recuperer <p1></p1> a tour de role dans une string* (par exemple)
    tout en sachant que les elements qui sont entre <p1></p1> peuvent varié
    je peux avoir un seul comme je peux avoir plusieurs.
    et que je sais pas combien de <p1></p1> j'aurai

    comment je peux my prendre?

    Merci

  2. #2
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Pourquoi ne pas simplement utiliser la serialization ?
    Code vb : 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
     
    <Serializable()> _
    <System.Xml.Serialization.XmlRoot("Racine")> _
    Public Class Racine
        Inherits List(Of p1)
        Public Sub New()
        End Sub
    End Class
     
    <Serializable()> _
    Public Class p1
        Public id As String = ""
        Public nom As String = ""
        Public prenom As String = ""
        Public adresse As String = ""
    End Class
    Utilisation :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        Dim rd As New StringReader("le xml ici ou alors tu passes directement le stream que tu as")
        Dim r As Racine = DirectCast(sr.Deserialize(rd), Racine)
    Et tout sera dans r. Pour énumérer il te suffira de faire un For Each.

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 138
    Par défaut
    merci de me repondre
    mais le sr c'est quoi sa declaration?
    Merci

  4. #4
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Oops.
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim sr As New XmlSerializer(GetType(Racine))

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 138
    Par défaut
    merci
    vous avez dit :Et tout sera dans r. Pour énumérer il te suffira de faire un For Each.

    je sais que c'est idiot de ma part
    mais comment je vais le faire ?

    merci

  6. #6
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
        For Each item As p1 In r
            ' faire quelque chose avec item
     
        Next

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 138
    Par défaut
    For Each item As p1 In r
    MsgBox(item.id + vbCrLf + item.nom + vbCrLf + item.prenom + vbCrLf + item.adresse)
    Next

    j'arrive a afficher les données
    mais moi je veux recuperer aussi les balises

    c'est possible??

    Merci

  8. #8
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Alala, décidément
    On reprends tout :
    x_string est une variable String qui contient le xml
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim xdoc As New System.Xml.XmlDocument()
    xdoc.LoadXml(x_string)
    Dim root_node As System.Xml.XmlNode = xdoc.ChildNodes(0)
    For Each node As System.Xml.XmlNode In root_node.ChildNodes
        MessageBox.Show(node.OuterXml)
    Next

  9. #9
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 138
    Par défaut
    oui ca marche !! merci
    juste un dernier truc
    c'est possible que je recupere a chaque fois la racine ?

  10. #10
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Comment ça récupérer à chaque fois la racine ?

  11. #11
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 138
    Par défaut
    comme par exemple a chak fois recuperer comme ceci:

    <Racine ><p1><id>.......</p1></Racine>
    <Racine ><p1>.......</p1></Racine>
    <Racine ><p1>.......</p1></Racine>

  12. #12
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Je dirais
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBox.Show("<Racine>" & node.OuterXml & "</Racine>")

  13. #13
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 138
    Par défaut
    lol
    Merci c'est tres gentil de votre part de me repondre aussi vite

  14. #14
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    N'oubliez pas le si tout est bon

  15. #15
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 138
    Par défaut
    oui avec plaisir.Merci

  16. #16
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 138
    Par défaut changer la valeur d'une balise
    salut
    voila mon xml

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <p1>
    <id>A1A</id>
    <nom>Gauch</nom>
    <prenom>Alain</prenom>
    </p1>


    c'est possible de changer la valeur de la balse <id> pour avoi apres


    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <p1>
    <id>99842</id>
    <nom>Gauch</nom>
    <prenom>Alain</prenom>
    </p1>


    Merci

  17. #17
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim xdoc As New System.Xml.XmlDocument()
    xdoc.LoadXml(x_string)
    Dim root_node As System.Xml.XmlNode = xdoc.ChildNodes(0)
    For Each node As System.Xml.XmlNode In root_node.ChildNodes
        node.SelectSingleNode("id").InnerText = "199203"
        MessageBox.Show(node.OuterXml)
    Next

    Sinon il y a des infos qui pourraient être intéressantes concernant l'utilisation du xml ici : http://msdn.microsoft.com/fr-fr/libr...87(VS.80).aspx

  18. #18
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 138
    Par défaut
    Merci beaucoup

  19. #19
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 138
    Par défaut
    [QUOTE=smyley;4058608]
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim xdoc As New System.Xml.XmlDocument()
    xdoc.LoadXml(x_string)
    Dim root_node As System.Xml.XmlNode = xdoc.ChildNodes(0)
    For Each node As System.Xml.XmlNode In root_node.ChildNodes
        node.SelectSingleNode("id").InnerText = "199203"
        MessageBox.Show(node.OuterXml)
    Next

    salut juste une question si la balise id n'existe pas c'est quoi le teste qu'il faut faire pour ne pas avoir une exception?
    Merci

  20. #20
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Si id n'existe pas, le retour de node.SelectSingleNode("id") est "Nothing". Tu dois donc tester si la valeur de retour de node.SelectSingleNode("id") est différente de Nothing avant d'appeler une méthode dessus.
    Le deuxième test à effectué pour ne pas avoir d'erreur c'est vérifier si le document xml contient bien quelque chose, ie vérifie si doc.ChildNodes.Count est supérieur ou égal à 1.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Parcourir un fichier XML et retourner ses elements
    Par Ya7yaKech dans le forum Windows Forms
    Réponses: 6
    Dernier message: 09/02/2009, 00h41
  2. Recuperer les elements d'un XML
    Par Ya7yaKech dans le forum Windows Forms
    Réponses: 20
    Dernier message: 13/01/2009, 12h27
  3. recuperer un element javascript par son nom
    Par fafoula dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 12/09/2008, 16h39
  4. [ASP][DOM] Récupérer les éléments d'un XML
    Par Tikate dans le forum XML/XSL et SOAP
    Réponses: 7
    Dernier message: 03/05/2006, 11h51
  5. [VB6] [FileListBox] Récupérer les éléments sélectionnés
    Par tomnie dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 22/10/2002, 09h11

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