Créer fichier xml ajouter données

cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 - 2 juil. 2012 à 15:16
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 - 5 juil. 2012 à 17:35
Bonjour,
je voudrais éviter de passer par une base de données sql car c'est un peu
lourd a mettre en place et sans doute non nécessaire dans mon cas.
J'ai donc pensé aux fichiers xml ou on peut avoir une certaine représentation de structure.

en fait je dois faire un "pont" entre une appli caisse et un serveur web.
une application qui transmet des données et un serveur web et en recupere la réponse pour la retransmettre a l'appli caisse ( qui ne dispose pas forcement d'une base sql).

Il faudrait que j'enregistre les elements envoyés et recus dans un fichier (une sorte de journal) .

J'ai pensé a un fichier xml.

ce sont des "logs" de vente que je dois enregistrer dedans .
Exemple de "structure" : date_vente(date),no_transaction(int), montant(decimal),remise(decimal)

je voudrais donc que mon fichier soit "typé" car:
je voudrais ensuite pouvoir sortir un "journal" des logs le soir par exemple avec uniquement les ventes du jour
je veux donc pouvoir faire un tri sur les dates par exemple ( eventuellement sur d'autres types).

J'aimerais egalement avoir les ventes sur une periode que je sélectionne , etc...

1ere question : peut on faire cela avec xml ? ( les stats ,etc...)
Ensuite comment typer mon fichier ?
Je n'arrive pas a trouver d'exemple de code sur le net avec toutes les infos.
J'ai trouvé un truc pour ajouter des données (avec xmldocument: ca ca marche)
sauf que si mon fichier n'existe pas , il ne se passe rien ...
j'aimerais bien dans ce cas , pouvoir le créer a la volée si possible ...
(avec structure et type, ce que je ne maitrise pas)

je suis sous visual studio 2008.

J'ai vu des trucs concernant linq mais est ce mieux(est ce que ca apporte quelque chose? simplicité ?) ? ( autre outil que je ne maitrise pas encore)

Je cherche la solution la plus simple pour pouvoir avoir quelque chose du type :
vente 1 : date/heure , article , libelle , famille , montant , remise
vente 2 : ............
vente 3 : .............

et que je pourrais lire au final dans une grille avec selection periode (pouvoir mettre des contraintes/filtres comme avec sql)

Merci

10 réponses

Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
2 juil. 2012 à 15:37
Bonjour

pour genere du xml, tu as cette discussion comme exemple de Linq, ou encore celle-ci.

Ensuite, le xml n'est ni plus ni moins qu'un fichier texte, donc tu ne peux par faire grand chose directement avec, si ce n'est de le lire et d'écrire dedans.

Par contre avec les données, une fois importées dans ton appli tu peux faire ce que tu veux, à condition d'avoir correctement écrit la classe qui recevera chaque instance de tes données.


Whismeril
0
cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 2
2 juil. 2012 à 17:03
Merci de cette reponse rapide ... je continue les recherches
j'essaie de voir un peu partout qu'est ce qui pourrait etre le plus simple a mettre en oeuvre...
je manipule un petit peu le xml pour des fichiers config et pour des exports de bds ... ca va a peu pres.
Mais la j'aimeraisne pas avoir a utiliser sqlexpress ( ou autre bdd) car il faut l'installer le configurer etc...
comme je n'ai pas quelque chose de tres "gros" a mettre , je me suis dit que xml pourrait faire l'affaire( mais je n'en sui pas sur ...)
pour l'instant tout etait géré "automatiquement" pour les bds quand je faisait des datasset.writexml ... (ou read) de chaque coté mes bases de données (avec les memes structures communiquaient nickel)

mais la je voudrais faire une sorte de "mini bd" avec des fichiers xml ... et honnetement je rame ...
je veux donc une sorte de structure ( en tout cas j'aimerais que ce soit typé si possible) afin que quand je fais dataset.readxml(le fichier) et que je le met en source d'une grille ca sorte "nickel" , ou bien si je veux filtrer sur des dates par exemple , que je puisse le faire et que tout ne soit pas interprété comme du texte.

la mon "probleme" est de faire ce fichier de structure ( je n'ai aps la syntaxe et galere pour la trouver ... c'est pas croyabe qu'il y avait un editeur xml ds VS 2005 et non dans 2008 ca m'aurait bien aidé pour commencer ( j'ai vu des exemples sur le net )

et la creation/insertion de la 1ere donnée ...

je pensais que linq me permettrait de faire des sortes de schémas avec des types et qu'ensuite j'aurais juste a introduire ces classes linq dans un fichier xml et que ca se ferait tout seul...
mais quand je regarde les exemples avec linq Xdocument (ou sans XmlDocument) ca me semble a peu pres kiffe kiffe car ej ne vois pas ou on defini les types.

le xmldocument.load , j'ai compris
mais le souci est quand je n'ai justement pas de fichier xml au depart ...ben la je sais pas quoi faire ...

le 1er "exemple" a peu pret concret que j'ai trouvé et dont je me suis inspiré est sur ce site :
http://jfdeterme.developpez.com/tutoriels/dotnet/csharp/tuto_xpath/

partie insertion de nouveau noeud...
mais on part jamais d'un fichier vide ou inexistant et il n'ya pas non plus de type la dedans ...
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
2 juil. 2012 à 18:01
Sans vouloir trop insister, à 15:45:48, je montre comment lire et écrire une structure perso (simple certes, mais quand même) définie directement par la classe Personnes.
Les données sont stockées dans une List, à partir de laquelle, tu peux trier, filtrer etc...



Whismeril
0
cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 2
3 juil. 2012 à 06:01
Je ne comprends pas pourquoi prenom est en attribite de nom dans ton exemple et date baissance en dessous... A quoi ca sert ? Ensuite c vrai que je ne suis pas habitue a manipuler les listes. Je voulais mettre ca peut etre dans un dataset ou datatable pour lavoir comme source d une grille. La jai limpression que tu construis ta list avece en lidant un par un chaque champ..je pensais evite ca avec le datatable.readxml
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
3 juil. 2012 à 07:02
Bonjour,

le prénom est en attribut juste pour l'exemple.
Tu peux mettre une liste en datasource d'une grille, textbox, listbox etc, soit directement soit par l'intermédiaire d'un databindingsource.

Effectivement, pour faire du xml avec Linq, tu décris exactement le format de ton xml pour un enregistrement, mais tu ne le fait qu'une fois!

Si tu veux éviter ça tu peux utiliser xmlserializer, un exemple ici. Par contre ça ne marchera pas si tu veux serializer une classe dont certaines propriétés sont elles-meme des classes perso. Pour continuer avec mon exemple, si tu veux ajouter un champ "Conjoint" qui serait lui aussi de type Personne, XmlSerializer ne s'en sortirait pas.

Whismeril
0
zertyx Messages postés 14 Date d'inscription dimanche 23 novembre 2008 Statut Membre Dernière intervention 31 juillet 2012 16
4 juil. 2012 à 12:37
salut;
tout d'abord je suis parfaitement d’accord avec "whismeril" du fait qu'un fichier xml n'est pas vraiment utile, mais ça n’empêche pas de t'apporter de l'aide si tu t'accroche à cette idée.
ben le meilleure façon pour écrire sur un fichier xlm et d'utiliser un "XmlWriter" (il faut inclure "using System.Xml;"), et pour lire tu peut utiliser "XmlReader".
sinon pourquoi tu ne pense pas a une solution de "repporting" (les états) c'est fait pour ce genre d'applications.
Bon courage ;-)
0
cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 2
5 juil. 2012 à 12:32
Bonjour,
je ne suis pas trop habitué au reporting non plus a vrai dire ... :(
mais je stockerais ou les données a ce moment pour le reporting et sous quel forme ?
0
zertyx Messages postés 14 Date d'inscription dimanche 23 novembre 2008 Statut Membre Dernière intervention 31 juillet 2012 16
5 juil. 2012 à 15:42
qui dit C# dit visual studio, et qui visual studio dit sqlServer, mais c'est pas forcement la seule solution, donc tu peux stoker tes données dans n'importe quelle base de données et dans ton application tu ajoute une "ReportViewer" (c'est un contrôle de visual studio) et soit tu créer un rapport avec l'assistant c'est très facile et suffisant si te veux afficher les même tables chaque fois (mais les données changent selon tes manipulations) ou générer carrément un fichier RDL (2005) ou RDLC (depuis 2008) en code si tu et fort en programmation.
Bon chance ;-)
0
cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 2
5 juil. 2012 à 15:49
justement le truc c'est que je ne veux pas avoir a installer sqlserver forcement ...
c trop lourd pour le peu de données qu'il y aura dedans ...
c pour cela que je voulais "un systeme de fichiers" qui puisse etre un peu utilisé comme une petite base de données
et c'est pour ca que j'avais pensé a xml qui est un peu structuré ...
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
5 juil. 2012 à 17:35
Bonsoir, tu peux très bien faire ce que tu veux avec du xml, enfin stocker tes données avec.
Et ensuite les gérer comme bon te semble dans ton application.
Perso, je n'ai aucune appli avec sql, une avec access qui devrait sauter dès que le PC sous Windows 2000 (et oui ça existe encore) sera remplacé.
Le gros handicap du xml, c'est que tu charges le fichiers au début et que tu l'écrases à l'export, si tu as deux applis dessus, il te faudra gérer la synchronisation.

Pour une appui réseau, ou il n'était pas utile que deux utilisateurs travaillent en même temps, j'ouvre un filestream et je le referme pas. Quand quelqu'un lance une autre instance de l'appli, il y a une erreur et la deuxième instance s'arrête.

Dans ton cas d'appli serveur, ça ne sera peut-être pas aussi simple.

Whismeril
0
Rejoignez-nous