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 :

Récupérer les noms des éléments d'une structure pour construire un fichier xml


Sujet :

VB.NET

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Points : 48
    Points
    48
    Par défaut Récupérer les noms des éléments d'une structure pour construire un fichier xml
    Bonjour,

    Je cherche à récupérer le nom de chaque élément contenu dans une structure faisant parti elle meme d'une structure.
    Voici à quoi ressemble ma 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
    Public Structure PARTITION_STRUCT
    	Public ZSystem As ZSYS
    	Public ZCount As ZCOUNT
    End Structure
     
    'Structure ZSYS
    Public Structure ZSYS
    	Public SNB As UInt64	
    	Public PID As Byte
    	Public KID As String
    End Structure
     
    'Structure ZCOUNT
    Public Structure ZCOUNT
    	Public RELOADING1 As String
    	Public COUNTER1 As String
    End Structure
    L'idée étant d'obtenir ce format en xml:

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <SRT512>
      <PARTITIONS>
        <ZSystem>
    		<SNB>SNB value<SNB />
    		<PID>PID value<PID />
    		<KID>KID value<KID />
    	    <ZSystem />
        <ZCount>
    		<RELOADING1>RELOADING1 value<RELOADING1 />
    		<COUNTER1>COUNTER1 value<COUNTER1 />
        <ZCount />
      </PARTITIONS>
    </SRT512>

    Pour le moment j'arrive à récupérer les noeuds principaux "ZSystem" et "ZCount", mais je n'arrive pas à descendre dans l'arborescence:

    Voilà mon code qui fonctionne jusque là:

    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
    Public function SRT512ToXml(byval pPartition As PARTITION_STRUCT) As XmlDocument
     
    'création d'une nouvelle instance du membre xmldocument
    Dim XmlDoc As XmlDocument = New XmlDocument()
     
    'création du document
    XmlDoc.LoadXml("<SRT512><SRT512 />")
     
    'Création de la balise <PARTITIONS>
    Dim XmlElemPart As XmlElement = XmlDoc.CreateElement("PARTITIONS")
     
    'creation des balises incluses dans la balise <PARTITIONS> à partir de la structure PARTITION_STRUCT
    For Each ZoneField In pPartition.GetType.GetFields
    	Dim XmlElemZone As XmlElement	
    	XmlElemZone = XmlDoc.CreateElement(ZoneField.Name)
     
    		'creer un noeud pour chaque sous éléments de l'élément Zone
    		For Each ..................................... =========================> la je ne sais pas comment faire
    		Dim XmlElemSub As XmlElement	
    		XmlElemSub = XmlDoc.CreateElement(.......)
     
    		Next
    'j'ajoute l'element Zone à l'element Partition
    XmlElemPart.AppendChild(XmlElemZone)
     
    Next
     
    'j'joute l'élément Partitions au document
    XmlDoc.DocumentElement.AppendChild(XmlElemPart)
     
    return XmlDoc

  2. #2
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour

    Bah tu peux faire ceci:
    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
    34
    35
    36
     
    Public Class Form2
     
     
    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
            Dim part As New PARTITION_STRUCT
            part.ZSystem = New ZSYS(14, 255, "KID")
            part.ZCount = New ZCOUNT("alpha", "beta")
            Dim doc As XmlDocument
            doc = SerializeToXmlDocument(part)
            ' Save the document to a file.
            doc.Save("partition.xml")
        End Sub
    Public Function SerializeToXmlDocument(input As Object) As XmlDocument
            Dim ser As XmlSerializer = New XmlSerializer(input.GetType(), "http://schemas.yournamespace.com")
     
     
            Dim xd As XmlDocument = Nothing
            Using memStm As MemoryStream = New MemoryStream()
                ser.Serialize(memStm, input)
     
                memStm.Position = 0
     
                Dim settings As New XmlReaderSettings()
     
                settings.IgnoreWhitespace = True
     
                Using xtr As XmlReader = XmlReader.Create(memStm, settings)
                    xd = New XmlDocument()
                    xd.Load(xtr)
                End Using
            End Using
     
            Return xd
        End Function
    End Class
    bon code...

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 128
    Points : 48
    Points
    48
    Par défaut
    Merci, je ne connaissais pas cette facon de faire.

    Par contre j'ai une erreur lors de l'execution en mode debug

    System.IO.FileNotFoundException: Could not load file or assembly 'test.XmlSerializers.-
    dont j'ai trouvé l'explication ici https://cdiese.fr/exceptions-a-lutil...xmlserializer/

    J'avoue ne pas avoir tout compris de l'explication, mais si je comprends bien cette erreur est "normal", en meme temps je ne vois pas du tout comment réussir à la contourner.

    Quelle serait la logiqiue d'un "bon" developpeur sur un cas comme ca ?

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/09/2009, 03h03
  2. Récupérer les noms des champs dans une requête
    Par Nerziel dans le forum Général Python
    Réponses: 1
    Dernier message: 14/09/2009, 11h29
  3. Réponses: 5
    Dernier message: 11/07/2007, 16h03
  4. Réponses: 7
    Dernier message: 26/05/2007, 12h43
  5. récupérer les noms des champs d'une table access
    Par fabrice33 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 06/04/2007, 19h38

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