Lire, modifier et crée un fichier XML sous VB.net 2008 - Le retour
cs_megamario
Messages postés145Date d'inscriptionlundi 15 juin 2009StatutMembreDernière intervention14 février 2013
-
1 juil. 2009 à 15:54
cs_megamario
Messages postés145Date d'inscriptionlundi 15 juin 2009StatutMembreDernière intervention14 février 2013
-
6 juil. 2009 à 15:59
Bonjour à tous
Pour ceux qui me connaisse déjà, mon projet avance mais suite a (enfin)
une réunion pour établir (enfin) un cahier des charges. J'ai quelques
modification a apporter a mon programme, surtout en ce qui concerne les
fichiers XML. Ce que j'avais modifié avec une grand aide de"[auteur/MAYZZ/85589.aspx Mayzz]", qui m'avais crée un morceau de code. Malheureusement ne conviens plus.
Voici le code XML sur lequel je doit travailler(ce sera de ce format la):
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
<?xml version= '1.0' encoding="utf-8" ?>
Function Load(ByVal filename As String) As Collection
'
Try
Dim i As Integer = 0
'Dim resul As Integer
Dim Coll As XmlDocument = New XmlDocument
Coll.Load(filename)
Dim navigateur As XPathNavigator = Coll.CreateNavigator()
'La je veux récupérer tout les information qui concerne l'ACM1000 / mesures /item
Dim noeuds As XPathNodeIterator = navigateur.Select("/config/type[@version='ACM1000']/mesures/item")
While noeuds.MoveNext()
Dim Nom, Type, Obj, Ind, Format, Unit, Selection, SelectInter, SeuilInter As String
'Voila ce que je veux obtenir a savoir remplir mes variables correspondante puis remplir ma collection. Nom Type Obj Ind Format Unit Selection SelectInter SeuilInter =
'Ma collection
'Ici remplissage de ma collection avec toute les variables
End While
Catch e As Exception
MsgBox("erreur")
Return Nothing
End Try
End Function
Voila, j'ai comme vous prouver voir tester avec les XPath
Et la j'essaie avec DOM
Mais a chaque fois j'ai du mal. Avec Xpath j'arrive pas à parcourir tout les données enfant de "item"
On pensais a définir le select directement dans item/nom puis item/Obj etc... sa marche mais c'est lourd.
Et pour le moment en utilisation de DOM j'arrive a parcourir les noeud mais pas a recuperer les données
Merci de votre aide
Technicien en électricité industriel. En cours de reconversion par un BTS IRIS 1er année.
Actuellement en stage dans mon entreprise en R&D.
A voir également:
Lire, modifier et crée un fichier XML sous VB.net 2008 - Le retour
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 1 juil. 2009 à 17:02
Salut ;O)
Tu as donc un format d' XML déja existant ? Tu ne peux donc pas créer toi même ton propre shéma xml si je comprend bien ? Donc la serialisation n'est plus possible ?
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
cs_megamario
Messages postés145Date d'inscriptionlundi 15 juin 2009StatutMembreDernière intervention14 février 2013 1 juil. 2009 à 18:03
Bonjour, Mayzz
Je dirais pas que je l'ai déjà existant mais ou peut conciderer tout comme car il m'impose se format. Mais il faut que je le crée a la mimine. Par contre je doit pouvoir le faire évoluer de mon logiciel.
Votre précédente proposition, après quelque légère modification, marchais très bien et j'arrivais à faire ce que je voulais.
le problème c'est que suite a la réunion quelques éléments ont changés. et notamment dans le déroulement du logiciel il doit être possible de sauvegarder les modifications et sélection faite pour évite a l'opérateur de tout sélectionner. La sauvegarde devra donc utilisé la même architecture XML.
Avec la précédente version j'avais 2 fichier par système multiplié par le nombre de système, maintenant il m'en faut qu'un seul fichier XML avec tout dedans comme on retrouve avec mon exemple de XML si dessus. La j'en ai mis que 2 mais j'en ai 6 systèmes diffèrents.
Donc il faut que je puisse recuperer mes données corespondante au system selectionner que je stock dans une voir 2 collection (mon maitre de stage préfèrerais 1 collection, mais moi je préfère 2 collections pour séparer les mesures analogique et les autres qui sont tout ou rien. Je doit pourvoir le modifier (ajouter ou enlever des données dans chaque système) par contre pas ajouter de nouveau systèmes.
Et enfin je doit pouvoir récupérer ma ou mes collections pour crée un nouveau XML que je peut sauvegarder pour le recharger plutard dans ce fichier XML il peut trés bien y avoir que 1 seul système avec donc ces mesures et entrée.
Technicien en électricité industriel. En cours de reconversion par un BTS IRIS 1er année.
Actuellement en stage dans mon entreprise en R&D.
cs_megamario
Messages postés145Date d'inscriptionlundi 15 juin 2009StatutMembreDernière intervention14 février 2013 2 juil. 2009 à 10:04
Bonjour,
Je suis arriver a quelque chose pour la lecture de mon fichier XML:
***************************************************
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Nom, Type, Obj, Ind, Format, Unit, Selection, SelectInter, SeuilInter As String
Dim Typ As XmlNode
Dim Types As XmlNode
Dim Items As XmlNode
Doc = New Xml.XmlDocument
Doc.Load("f:\essaie1.xml")
ListXml = Doc.GetElementsByTagName("type")
For Each Typ In ListXml
If Typ.Attributes("version").Value = "ACM1000" Then
For Each Types In Typ
If Types.LocalName = "mesures" Then
For Each Items In Types
Nom = Items.SelectSingleNode("nom").InnerText
Type = "mesure"
Obj = Items.SelectSingleNode("Obj").InnerText
Ind = Items.SelectSingleNode("Ind").InnerText
Format = Items.SelectSingleNode("Format").InnerText
Unit = Items.SelectSingleNode("Unit").InnerText
Selection = Items.SelectSingleNode("Selection").InnerText
SelectInter = Items.SelectSingleNode("SelectInter").InnerText
SeuilInter = Items.SelectSingleNode("SeuilInter").InnerText
'Ici incrementation de ma variable collection des mesures
'' "
'' "
'' "
'' "
Next
End If
If Types.LocalName = "entrees" Then
For Each Items In Types
Nom = Items.SelectSingleNode("nom").InnerText
Obj = Items.SelectSingleNode("Obj").InnerText
Ind = Items.SelectSingleNode("Ind").InnerText
Selection = Items.SelectSingleNode("Selection").InnerText
SelectInter = Items.SelectSingleNode("SelectInter").InnerText
'Ici incrementation de ma variable collection des entrees
'' "
'' "
'' "
'' "
Next
End If
Next
End If
Next
End Sub
*******************************************************************
La cela marche bien, je récupère bien mes données. Reste à les stocker dans une collection.
Et ensuite la modification et la création.
Technicien en électricité industriel. En cours de reconversion par un BTS IRIS 1er année.
Actuellement en stage dans mon entreprise en R&D.
cs_megamario
Messages postés145Date d'inscriptionlundi 15 juin 2009StatutMembreDernière intervention14 février 2013 3 juil. 2009 à 14:10
Bonjour
[../auteur/MAYZZ/85589.aspx Mayzz]
[../auteur/MAYZZ/85589.aspx
]
J'y suis enfin arrivé, je retrouve un peut ce qui tu viens de me proposé, en tout cas maintenant ma collection marche
mais j'ai toujours un souci, décidément je suis pas bon :(
J'arrive bien a crée mes collections à partir du XML, à les lires et à ajouter manuellement un ensemble de données (représentant par exemple un nouvelle mesure) pas de souci la dessus, mais j'arrive pas a ajouté dans le fichier XML existant cette nouvelle mesures. J'arrive a crée un nouveau fichier grâce à la fonction SAVE().
Et tout sa pas bien si j'utilise la fonction WriteAllText() mais cela n'implémente pas le fichier.
voici ce que je voudrais ajouter donc a mon fichier
Co = New Items 'Items etant ma classe pour la collection
Co = CollMesure(k) 'k etant la clef de mon Hashtable CollMesure
Dim Aj As XElement = _
cs_megamario
Messages postés145Date d'inscriptionlundi 15 juin 2009StatutMembreDernière intervention14 février 2013 6 juil. 2009 à 07:52
Bonjour à vous,
Arff pas de net ce week-end :(
Bon du coup je reprend mon problème du boulot.
J'arrive toujours pas a ajouter un noeud dans mon fichier XML, mais il y a une chose que j'ai déjà peut être pas compris:
L'écriture se fait en live ou pas? Je m'explique, peut t'on modifier directement le fichier XML ou faut t'il le charger puis le modifier puis le réenregistrer. je pense que c'est déjà pour sa que je comprend pas tout.
Pourtant cela parait simple en regardant les tuto mais je doit etre vraiment mauvais ;).
Merci de votre aide
Technicien en électricité industriel. En cours de reconversion par un BTS IRIS 1er année.
Actuellement en stage dans mon entreprise en R&D.
cs_megamario
Messages postés145Date d'inscriptionlundi 15 juin 2009StatutMembreDernière intervention14 février 2013 6 juil. 2009 à 15:59
Bonjour "PCPT"
J'ai essayé de chercher avec votre aide, mais je n'y arrivais pas, je suis partie avec une Hastable + une classe pour mes collection.
Et puis j'avoue que comme j'ai réussi avec mon hastable je suis plus retourner par la suite pour bien me concentrer sur la partie XML.
En tout cas je viens de reussir, c'est peut etre pas le plus simple car j'ai commencer a regarder du coté de LINQ to XML et cela semble plus facile de comprehension.
En tout cas voici mon code:
Public Sub WriteXML(ByVal filename As String, ByVal VerSup As String, ByVal Tp As String, ByVal k As String)
Try
Dim Elem, ElNom, ElObj, ElInd, ElFormat, ElUnit, ElSelection, ElSelectInter, ElSeuilInter As XmlElement
Dim Typ, Types As XmlNode
Doc = New Xml.XmlDocument
Doc.Load(filename)
Dim root As XmlNode = Doc.DocumentElement
ListXml = Doc.GetElementsByTagName("type")
Dim Co As Items = CollMesure(k) ' Initialisation de la collection. Items etant ma classe If Tp "entrees" Then Co CollEntree(k)
For Each Typ In ListXml
If Typ.Attributes("version").Value = VerSup Then
For Each Types In Typ
If Types.LocalName = Tp Then
Elem = Doc.CreateElement("item")
ElNom = Doc.CreateElement("Nom")
ElObj = Doc.CreateElement("Obj")
ElInd = Doc.CreateElement("Ind")
ElFormat = Doc.CreateElement("Format")
ElUnit = Doc.CreateElement("Unit")
ElSelection = Doc.CreateElement("Selection")
ElSelectInter = Doc.CreateElement("SelectInter")
ElSeuilInter = Doc.CreateElement("SeuilInter")
ElNom.InnerText = Co.Nom
ElObj.InnerText = Co.Obj
ElInd.InnerText = Co.Ind
ElFormat.InnerText = Co.Format
ElUnit.InnerText = Co.Unit
ElSelection.InnerText = Co.Selection
ElSelectInter.InnerText = Co.SelectInter
ElSeuilInter.InnerText = Co.SeuilInter
Elem.AppendChild(ElNom)
Elem.AppendChild(ElNom)
Elem.AppendChild(ElObj)
Elem.AppendChild(ElInd)
Elem.AppendChild(ElFormat)
Elem.AppendChild(ElUnit)
Elem.AppendChild(ElSelection)
Elem.AppendChild(ElSelectInter)
Elem.AppendChild(ElSeuilInter)
Types.InsertAfter(Elem, Types.LastChild)
End If
Next
End If
Next
Doc.Save(filename)
Catch ex As Exception
MsgBox("Erreur d'ecriture")
End Try
End Sub
Technicien en électricité industriel. En cours de reconversion par un BTS IRIS 1er année.
Actuellement en stage dans mon entreprise en R&D.