GESTION FACILE DES FICHIERS XML EN VB.NET (CREATION / LECTURE / MODIFICATIONS /

HALLLES Messages postés 16 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 27 mai 2005 - 27 mai 2005 à 17:08
cs_Aquadrox Messages postés 7 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 25 avril 2012 - 25 avril 2012 à 08:38
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/30445-gestion-facile-des-fichiers-xml-en-vb-net-creation-lecture-modifications-ajouts-suppressions

cs_Aquadrox Messages postés 7 Date d'inscription jeudi 23 octobre 2003 Statut Membre Dernière intervention 25 avril 2012
25 avril 2012 à 08:38
Bonjour,

Il faut faire attention, la méthode createNewFile ne libère pas le filestream, du coup le fichier reste locké.
Je lai modifié comme suit:
Public Sub createNewFile(ByVal nomFichier As String)

Try
'creation d'un nouveau fichier
Dim fs As System.IO.FileStream
fs = System.IO.File.Create(nomFichier)
fs.Dispose()
Catch e As Exception
MsgBox("Erreur dans la création du fichier : " & e.Message)
End Try
End Sub

Comme cela le fichier est délocké et peut être utilisé dans la foulée.
cs_zer988 Messages postés 5 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 18 avril 2010
29 sept. 2010 à 19:57
bonjour
une trés bonne application je suis al recherche d'un code d'une application qui Représenter un fichier XML dans un contrôle TreeView avec possibilité de mise à jour
direct sans utiliser un shema xsd ou bien autre... en suivant le path dans un textbox pour fair cette mise a jour
je vous en suplit aidé moi je suis sur cette recherche depuit 2 semaine
mon fichier xml est le suivant
<?xml version="1.0"?>

-
<Option Name="Pass">94f38f2e6abb6c0b5b33775c2c32cc69</Option>
<Option Name="Group" />
<Option Name="Bypass server userlimit">0</Option>
<Option Name="User Limit">0</Option>
<Option Name="IP Limit">0</Option>
<Option Name="Enabled">1</Option>
<Option Name="Comments" />
<Option Name="ForceSsl">0</Option>
-
<Disallowed />


-
-
<Option Name="FileRead">1</Option>
<Option Name="FileWrite">1</Option>
<Option Name="FileDelete">1</Option>
<Option Name="FileAppend">1</Option>
<Option Name="DirCreate">1</Option>
<Option Name="DirDelete">1</Option>
<Option Name="DirList">1</Option>
<Option Name="DirSubdirs">1</Option>
<Option Name="IsHome">1</Option>
<Option Name="AutoCreate">0</Option>




- <SpeedLimits DlType="0" DlLimit="10" ServerDlLimitBypass="0" UlType="0" UlLimit="10" ServerUlLimitBypass="0">
<Download />

</SpeedLimits>

-
<Option Name="Pass">633a20265a58c9c64fcef09f5ef62465</Option>
<Option Name="Group" />
<Option Name="Bypass server userlimit">0</Option>
<Option Name="User Limit">0</Option>
<Option Name="IP Limit">0</Option>
<Option Name="Enabled">1</Option>
<Option Name="Comments" />
<Option Name="ForceSsl">0</Option>
-
<Disallowed />


-
-
<Option Name="FileRead">1</Option>
<Option Name="FileWrite">1</Option>
<Option Name="FileDelete">1</Option>
<Option Name="FileAppend">0</Option>
<Option Name="DirCreate">1</Option>
<Option Name="DirDelete">1</Option>
<Option Name="DirList">1</Option>
<Option Name="DirSubdirs">1</Option>
<Option Name="IsHome">1</Option>
<Option Name="AutoCreate">0</Option>




- <SpeedLimits DlType="0" DlLimit="10" ServerDlLimitBypass="0" UlType="0" UlLimit="10" ServerUlLimitBypass="0">
<Download />

</SpeedLimits>
sharkus Messages postés 43 Date d'inscription mardi 16 juillet 2002 Statut Membre Dernière intervention 10 juillet 2012
8 janv. 2010 à 11:00
Merci pour cette classe bien utile ;)
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
28 juin 2009 à 00:12
Oki :-)
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
27 juin 2009 à 23:51
je modère, je ne chasse pas...
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
27 juin 2009 à 23:19
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
27 juin 2009 à 22:36
----------------------------------------
un an de commentaires nettoyé !!!
----------------------------------------

il n'y a aucune raison de s'énerver pour si peu!!

certains "conseils" étaient lègèrements attaquant mais justifés, d'autres étaient totalement déplacés et injustifiés

essayez de ne pas trop dériver de la source par elle-même

ici c'est une zone de commentaires de SOURCE, pas un forum et encore moins une zone à trolls

il est encore plus inutile (pour rester poli) de parler d'un membre "IL" sur sa source, et plus encore d'aller carrément insulter les participants !!! peu importe ce qu'on en pense

c'est pas la fête du slip

une personne PARTAGE, on donne (ou non) son avis, ses remerciements, ses conseils, ses critiques constructives, etc... sur ce partage

pour les gueguerres, réservez-vous çà par MP

merci !
chasseurdedemon Messages postés 60 Date d'inscription mardi 23 décembre 2003 Statut Membre Dernière intervention 15 novembre 2010
18 juin 2009 à 00:58
c'est bon j'ai trouver ^^
Dim Doc As New XmlDocument
Dim mElement As XmlElement
mElement = Doc.CreateElement("root")
Doc.AppendChild(mElement)
'Creation d'une XML declaration.
Dim xmldecl As XmlDeclaration
xmldecl = Doc.CreateXmlDeclaration("1.0", Nothing, Nothing)
Doc.InsertBefore(xmldecl, Doc.DocumentElement)
Doc.Save("c:\XmlDoc.xml")


merci
chasseurdedemon Messages postés 60 Date d'inscription mardi 23 décembre 2003 Statut Membre Dernière intervention 15 novembre 2010
18 juin 2009 à 00:33
bonjour,
je suis débutant en vb.net ( j'utiliser vb puis c puis c++ puis java et je veux tester le vb.net qui est de l'objet comparer a vb )

j'utilise les fonction de base pour géré les fichier xml ( merci quand même pour la source ^^ )

mais je voudrais savoir comment créer le fichier xml s'il n'existe pas sur le disque dure pour ensuite l'utiliser .

merci de ton aide.
GabSoftware Messages postés 72 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 14 novembre 2008
9 juin 2009 à 07:54
La source est mise à jour et devrait résoudre la plupart des problèmes rencontrés. Il suffit de connaître la syntaxe des requêtes XPath :)
killedman Messages postés 17 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 23 novembre 2017
3 avril 2009 à 17:50
Salut,

C'est bien comme source :)

Le problème est que je comprend pas comment tu fait pour créé un nouveau noeud si le fichier est de cette forme.

<Eleve nom="Kilvan" prenom="Mordak" El_Niv_Scol="6" El_Ref="1" Garde_partage="False" Num_Fiche="0">

</Eleve>

Mais bon, comme je suis plus habituer à travailler avec des BD :)

Merci pour le source ...
samterabyte Messages postés 1 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 24 janvier 2009
24 janv. 2009 à 15:28
Salut Gab,
ton source est idéal pour mettre le pied à l'etrier d'un newbie comme moi de vb et du xml.
Je rencontre cependant un petit problème, je parviens sans problème à utiliser getElement ou getAttribute, mais mon fichier xml reste insensible au setElement, SetElementValue, SetAttribute !
je suis sous VB express 2008/Vista
Ais-je manqué quleque chose ?
A+
passylmat Messages postés 17 Date d'inscription mercredi 11 janvier 2006 Statut Membre Dernière intervention 29 décembre 2008
29 juin 2008 à 16:34
Vraiment très bonne source, exactement ce qu'il me fallait ! Bravo, lisible, simple à comprendre et à utiliser, vraiment parfait !! ^^
GabSoftware Messages postés 72 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 14 novembre 2008
27 mars 2008 à 03:38
Pour les settings en C# ils sont aussi disponibles. Je les ai déjà utilisé par exemple dans mon GabMouseColorPicker qui est écrit en C#. Simplement la programmation est un peu différente. Voici comment faire tout simplement :

1 - On définit les paramètres que l'on souhaite dans l'onglet Settings des propriétés de l'application.
2 - On rajoute la directive suivante, où MonApplicationNameSpace correspond à l'espace de nom de votre application :

using MonApplicationNameSpace.Properties;

3 - On charge les settings manuellement au démarrage de l'application :

private void frmMain_Load(object sender, EventArgs e)
{
// On charge les settings
this.monControle.Checked = Settings.Default.monControleChecked;
//...
}
4 - On sauvegarde les settings à la fermeture de l'application

private void frmMain_Closing(object sender, FormClosingEventArgs e)
{
Settings.Default.Save();
}

Et voilà... tout simplement ! Il faut écrire un peu plus, mais ce n'est pas beaucoup plus compliqué que le VB. Bien que le VB soit plus sympa avec le binding automatique des propriétés des classes ! :)
tularis Messages postés 21 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 12 juillet 2009
25 mars 2008 à 14:19
j'approuve le commentaire de binoche, ta source est sympa, mais il faut apprendre a programmer comme de vrai développeurs maintenant, je te met 4/10 parce qu'il y a du travail comparé a la plupart des source de ce site qui ne sont ni commenté et parfois même non fonctionnel.
Tu surcharge ton code, et cela n'est toujours pas corrigés depuis 3 mois ...
Je considère que ta source est partageable et je te remercie de l'avoir affiché.
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
13 déc. 2007 à 19:54
Entierement d'accord, il y a pas mal de lourdeau qui oublit le "spirit comunity", ou viennet carement dans cette comunauté, en croyant que c'est télécharger.com ou que c'est la poudre de perlinpin miraculeuse du "dieu" bilou, arf arf arf..... :-)
GabSoftware Messages postés 72 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 14 novembre 2008
13 déc. 2007 à 17:34
1 sur 5 ...

Comme tu y vas !

Regardes. Imagines, tu crées un logiciel, ou un bout de code, il marche bien, tout le monde l'aime bien, il a une bonne note.
Mais, je trouve un défaut. Oh bien sûr ça ne nuit pas au fonctionnement, c'est juste une optimisation et je pourrai corriger ça moi-même et te le signaler.
Si je te le signale, tu peux corriger, ainsi ton logiciel devient meilleur. Je peux donner une bonne note car ton logiciel marche bien.
Mais non, je préfère directement te mettre un 1 sur 5, sans te laisser le temps de corriger !
Note qui restera même si tu corriges ton logiciel. Note qui restera là pour toujours.

En 3 mots... Merci du cadeau!
BinOff Messages postés 25 Date d'inscription mardi 24 juillet 2001 Statut Membre Dernière intervention 13 décembre 2007
13 déc. 2007 à 16:11
Bon je vois que la source plait à beaucoup de monde.

Je vais quand même t'annoncer un gros problème qui selon moi justifie la note que je te mets.

Les lignes :
Dim doc As New XmlDocument
doc.Load(fichier)

sont présente dans toutes les fonctions... à la place d'avoir un attribut doc privé à la classe.

Pourquoi ne ferais tu pas ceci :

private doc as xmlDocument 'en haut de ta classe

puis une property pour y accéder, et dans ton constructeur :

doc = New XmlDocument

(éventuellement prévoir une nouvelle fonction "save" ou "flush" qui peuvent être utile...

Actuellement si tu gardes ton source tel qu'il est, et que tu veux créer un fichier XML pour y ajouter des élements par exemple, la fonction recharge le fichier à chaque ajout d'un nouvel élement... Ca peut être très long... très très long même (plus le fichier xml grossi, plus l'ouverture sera lente)... Le correctif que je te propose te fera gagner beaucoup en performances.

Cordialement,
Pascal
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
22 nov. 2007 à 15:21
Tu utilises directememnt le "My.Settings" ?
ou tu passe par un :
' Get the application configuration file.
Dim config As System.Configuration.Configuration = _
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)

J'ai aussi trouvé une alternative interessante pour le raison evoquer sur le forum du lien suivant :
http://forums.microsoft.com/MSDN-FR/ShowPost.aspx?PostID=2085773&SiteID=12
GabSoftware Messages postés 72 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 14 novembre 2008
22 nov. 2007 à 11:08
Je n'améliore plus cette classe actuellement, mais libre à toi de changer ce qui ne te convient pas ;)
Je travaille actuellement sur mon lecteur audio GabPlayer 2 et je n'ai plus à utiliser ma classe GabXML en raison du nouveau My.Settings de .net 2
cs_exatex Messages postés 7 Date d'inscription jeudi 22 janvier 2004 Statut Membre Dernière intervention 4 novembre 2009
22 nov. 2007 à 07:31
Source relativement pratique.
Je dirait qu'il y a juste quelques "defaut" de presentation. Par exemple, j'aurais defini une propriété "File" pour le chemin du fichier avec une variable local de stockage nommé "_File".
De plus les Try / Catch sont un peut trop generaliste. Il faut eviter des Try qui englobe tout le code d'une procedure.

Va tu encore travailler sur cette classe?
Je vais certainement avoir a travailler du XML dans peut de temps, et il y a des chances pour que j'utilise ta class.

Bon travail tous de même, et merci de nous le faire partager.
GabSoftware Messages postés 72 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 14 novembre 2008
29 oct. 2007 à 03:33
Merci beaucoup ! :D
Utilisateur anonyme
26 oct. 2007 à 17:53
Salut,
Félicitation pour cette classe. C'est la classe (désolé)
Un exemple ! Je te rajoute à ma petite liste de bons codeurs ;)
Merci
A+
cs_orothierry Messages postés 1 Date d'inscription vendredi 12 novembre 2004 Statut Membre Dernière intervention 7 octobre 2007
7 oct. 2007 à 12:41
Si tout le monde faisait des codes aussi géniaux, (Class + codes de test complet + super bien fait et compréhensible) le monde serait surement meilleur lol.
Castelroussin Messages postés 5 Date d'inscription mercredi 6 décembre 2006 Statut Membre Dernière intervention 27 septembre 2007
27 sept. 2007 à 18:39
En 2 lignes....
Ta source est vraiment superbe. Bon Travail
GabSoftware Messages postés 72 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 14 novembre 2008
19 janv. 2007 à 23:20
oui, en quelque sorte, mais je ne connaissait pas optional avant...
et puis ça permet t'avoir 2 signatures de méthodes avec l'intellisense de vstudio :)
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
21 nov. 2006 à 15:50
Merci de ta réponse,
la signature se fait au niveau des définition "byval" ?
Quel est la subtilité entre les deux fonctions le même nom et deux signatures différentes, par exemple :"Public Function getAttribute(ByVal path As String, ByVal nom As String, ByVal position As Integer) As String"

C'est l'équivalent d'écrire une seule fonction avec "optional position" ?
GabSoftware Messages postés 72 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 14 novembre 2008
21 nov. 2006 à 07:59
les procédures avec le meme nom n'ont forcément pas la meme signature, c'est ce qui permet d'appeler toujours la bonne ... ;)
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
16 nov. 2006 à 16:59
Salut
Ta classe est vraiment nickel et 10/10, une petite question, surment de newbie, mais bon,
Pourquoi et comment il y aurait toute les publique sub en DOUBLE, comment savoir que c'est la premiere ou la deuxieme que l'on appel sachant qu'il y a les meme arguments sans surcharges ?
GabSoftware Messages postés 72 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 14 novembre 2008
17 nov. 2005 à 10:38
Bonjour,
ilham_layla : eh bien, cette classe a pour vocation d'être simple, non? :)
En tout cas, personnellement elle me simplifie beaucoup la vie!

jojodeboulco : merci !

Arnaud71870 : si tu veux, envoie moi un message privé pour me prévenir si tu a ajouté des fonctions, je pourrais les ajouter dans ma classe et la mettre à jour. Ca évitera d'avoir 2 sources presqu'identiques sur VB France ;)
Arnaud71870 Messages postés 2 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 28 février 2006
9 nov. 2005 à 16:20
Merci......

Je cherchais un code me permettant de générer un flux XML. Je suis en train d'adapter ta classe pour éviter de stocker les info dans un fichier.

Si je rajoute des fonctions je les mettrai en ligne .... encore que ta classe est plutot complete pour moi.

Thx pour le code.
jojodeboulco Messages postés 1 Date d'inscription jeudi 1 juillet 2004 Statut Membre Dernière intervention 26 octobre 2005
26 oct. 2005 à 23:34
Super! Rien à dire.
Je ne fais pas du tout du VB, mais j'ai "adapté" ton code en C# pour mes besoins et je te dis un grand merci!
J'ai cherché un moment et je ne trouvais rien. Merci encore.
ilham_layla Messages postés 5 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 11 novembre 2005
19 oct. 2005 à 11:31
salut je suis une debutante en xml svp je veux un code simple et compréhensif
GabSoftware Messages postés 72 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 14 novembre 2008
16 sept. 2005 à 03:33
à ton service ^^
MaDzA Messages postés 20 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 13 septembre 2005 1
13 sept. 2005 à 20:07
Merci beaucoup pour ta reponse claire et précise GrabSoftware!
A bientôt a tous!
GabSoftware Messages postés 72 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 14 novembre 2008
12 sept. 2005 à 22:30
Merci liquide pour tes commentaires, j'en tiendrai compte dans ma prochaine version.


Réponse à MaDzA :
Il existe DeleteElement, mais comme son nom l'indique elle sert est plutot destinée à supprimer des éléments.
supposons un objet GabXML nommé X associé au fichier XML suivant :

<?xml version="1.0"?>
<test>
<noeud>
<element valeur="1" />
</noeud>
</test>

Pour supprimer le noeud <noeud>, il suffit de faire :
X.DeleteElement("/test", "noeud")

C'est vrai qu'il manque une méthode DeleteNode, qui serait plus naturelle
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
11 août 2005 à 12:08
de visu, j'aurais obligé dans le sub new a donner un nom de fichier, cela permet de supprimer la property "Lefichier" et un "sub new", ensuite je remplacerais les nom "lefichier" en "File" plutot, afin de garder le caractere "standard", je trouve que "path" n'est pas forcement le bon terme dans les functions, il désigne en général un acces au disque dur et non un acces interne a un fichier XML. J'aurais mis un procédure d'effacement total, et je passerais les functions en overloads (bien que pas nécessaire). Je continue plus tard à détailler.

@+
MaDzA Messages postés 20 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 13 septembre 2005 1
11 août 2005 à 11:46
salut! Moi je cherche comment supprimer un noeud. Mais le problème c'est que tu mets des variables (path et nom) mais je trouve pas a quoi ça correspond.
Peux-tu m'éclaircir stp?
en tout cas, merci a toi pour ta source
GabSoftware Messages postés 72 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 14 novembre 2008
11 août 2005 à 02:25
Personne d'autre n'a d'avis? ça m'aiderait à faire évoluer la classe!
GabSoftware Messages postés 72 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 14 novembre 2008
30 juin 2005 à 01:22
Merci beaucoup, ton commentaire m'encourage ! ^_^

N'hésitez pas à me demander de rajouter des fonctionnalités ou de me signaler les éventuels bugs !
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
26 juin 2005 à 16:02
Tres bonne class, bonne base pour commencer a gerer le XML
GabSoftware Messages postés 72 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 14 novembre 2008
24 juin 2005 à 20:22
merci sprayart, je vais mettre à jour par une nouvelle version plus pratique en plus ! ;)
sprayart Messages postés 1 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 21 juin 2005
21 juin 2005 à 13:43
Bonjour,
je pense que les fonctions deleteElement et deleteElementAt sont identiques,
il manque dans la deuxieme le positionnement sur l'élément. @+
GabSoftware Messages postés 72 Date d'inscription jeudi 6 mai 2004 Statut Membre Dernière intervention 14 novembre 2008
30 mai 2005 à 02:57
Je suis désolé je ne vois pas trop ce que vous désirez, pourriez vous être plus précis?
Ma classe est en vb.NET, or je n'ai jamais fait d'aspx, mais si quelqu'un sait comment faire, qu'il n'hésite pas à aider HALLLES!

Sinon d'autres commentaires sur la classe elle-même? Des choses à améliorer? à ajouter? à retirer ? ...
HALLLES Messages postés 16 Date d'inscription vendredi 17 novembre 2000 Statut Membre Dernière intervention 27 mai 2005
27 mai 2005 à 17:08
Bonjour.

Auriez vous un code pour écrire un petit editeur gérant les disques locaux (je reste coté client mais je dois emplir une espece de forum avec des données multilingues, donc plusieurs alphabets) et Créer Ecrire Ajouter et Sauver des données sur disque.

Cela aurait la forme d un formulaire html, et des cases a remplir, une fois emplies les cases on sauve les données en deux fichiers un .TXT et un .XML sur mon disque local.

Merci de toute reponse.
Halles.
Rejoignez-nous