Mettre à jour/ajouter éléments dans un XML en C# [Résolu] - C#/.NET managed - Programmation
Marsh Posté le 22-11-2016 à 20:04:22
Salut,
C'est normal, XmlWriter échappe les caractères spéciaux (https://fr.wikipedia.org/wiki/Liste [...] ML_et_HTML) afin de préserver l'intégrité du document.
Tu dois utiliser la méthode CreateTextNode : https://msdn.microsoft.com/en-us/li [...] .110).aspx
Marsh Posté le 23-11-2016 à 09:28:55
Jean-Kevain a écrit : Salut, |
Merci Jean-Kevain.
Je un peu regardé l'exemple de ton lien, ça marche si je veux ajouter un élément avec son contenu par ex. la balise "<test>" avec son élément "Hello" ça fonctionne bien.
Code :
|
Mais par contre si je veux ajouter la dernière balise "<AA>" et ses sous balises <a>10</a><b>DDDD</b><c>11/12/1999</c> quelle méthode dois-je utiliser?
Code :
|
Marsh Posté le 23-11-2016 à 10:03:53
Tu dois instancier un nouveau XmlNode et l'associer au node père. Pour faire simple, tu dois jouer aux poupées russes avec les différents objets Xml***
(Désolé, je suis sur mobile et je ne peux pas te mettre un bout de code.)
Marsh Posté le 23-11-2016 à 14:55:57
Pour info XmlDocument ça date quand même de .Net 1.1. En d'autres termes ça a 15 ans, on a fait légèrement mieux depuis pour manipuler des XML...
Marsh Posté le 24-11-2016 à 09:40:42
TotalRecall a écrit : Pour info XmlDocument ça date quand même de .Net 1.1. En d'autres termes ça a 15 ans, on a fait légèrement mieux depuis pour manipuler des XML... |
Bonjour TotalRecall,
Tu me conseillerais quoi pour manipuler les XML? je ne te demande pas de faire le boulot à ma place... Je débute en programmation c# et pour l'instant j'ai un peu de mal avec les instances/class/etc.
merci d'avance..
Marsh Posté le 24-11-2016 à 09:46:13
Linq to XML.
http://stackoverflow.com/questions [...] using-linq
http://stackoverflow.com/questions [...] in-c-sharp
Marsh Posté le 24-11-2016 à 09:53:40
TotalRecall a écrit : Linq to XML. |
ok et merci pour les liens...
Marsh Posté le 24-11-2016 à 10:26:49
C'est une possibilité parmi d'autres, mais elle a le mérite d'être supportée en natif et bien plus récente de conception que XmlDocument, la syntaxe est beaucoup plus souple, notamment pour effectuer des requêtes sur un document existant mais aussi pour construire de nouveaux éléments.
Marsh Posté le 24-11-2016 à 10:59:45
TotalRecall a écrit : C'est une possibilité parmi d'autres, mais elle a le mérite d'être supportée en natif et bien plus récente de conception que XmlDocument, la syntaxe est beaucoup plus souple, notamment pour effectuer des requêtes sur un document existant mais aussi pour construire de nouveaux éléments. |
Avec ton premier lien j'ai réussi à faire ce que je voulais. Merci !
Maintenant il ne me reste plus qu'a rechercher la valeur d'un élément (ici n° ID). Je vais d'abord chercher de mon côté et reviens vers vous si jamais je bloque.
Mais d'abord j'ai une petite question.
Qu'est-ce qui est plus simple de faire pour rechercher l'ID? c'est rechercher une balise dédiée à ça (<id>ici n°ID</id> ) comme dans mon premier exemple ou alors comme sur le second exemple avec l'ID sur l'élément "news" par exemple ?
Code :
|
seconde méthode :
Code :
|
Marsh Posté le 24-11-2016 à 11:02:45
Attribut ou élément c'est exactement pareil en terme de difficulté, ça dépend juste de comment tu as envie de structurer ton xml.
Marsh Posté le 24-11-2016 à 11:06:56
Pour tes news tu dois pouvoir écrire un truc comme ça, un exemple à l'arrache (à vérifier) pour chaque cas :
Par attribut :
XDocument doc = XDocument.Load("test.xml" );
var resulmt = doc.Descendants("news" ) // ou .Elements("news" ), dépend de la structure, je te laisse regarder les détails
.Where(t => (string) t.Attribute("id" ) == "2" )
.FirstOrDefault();
Par noeud :
var result = doc.Elements("news" ).
Where(x => x.Element("id" ).Value == "2" ).FirstOrDefault();
Marsh Posté le 25-11-2016 à 09:58:47
TotalRecall a écrit : Pour tes news tu dois pouvoir écrire un truc comme ça, un exemple à l'arrache (à vérifier) pour chaque cas : |
Bonjour,
voilà j'ai utilisé ce code :
Code :
|
et ça marche parfaitement.
Je vous remercie pour votre aide. à bientôt...
Marsh Posté le 28-11-2016 à 09:24:17
Ok, j'avais compris ta phrase "Maintenant il ne me reste plus qu'a rechercher la valeur d'un élément (ici n° ID)" dans le sens "rechercher un élément par son id" et non pas "rechercher l'id du dernier élément".
Petites remarques :
- Ton code te renvoie le dernier élément dans la structure du xml, donc si tu veux l'id le plus grand mais que tes éléments ne sont pas dans l'ordre ça va foirer.
A la place tu pourrais faire qqch comme :
maxId = (int)xmlDoc.Descendants("news" ).Max(t => int.Parse(t.Attribute("id" ).Value) si tu veux être sûr de prendre le plus grand
- Si ton xml a plusieurs collections "news" utiliser Descendants ne fera pas forcément exactement ce que tu veux, il vaut mieux utiliser Elements() en naviguant explicitement dans le doc
Marsh Posté le 28-11-2016 à 09:49:56
TotalRecall a écrit : Ok, j'avais compris ta phrase "Maintenant il ne me reste plus qu'a rechercher la valeur d'un élément (ici n° ID)" dans le sens "rechercher un élément par son id" et non pas "rechercher l'id du dernier élément". |
Ok j'essaierai ta solution. Merci pour l'info !
Marsh Posté le 22-11-2016 à 14:38:45
Bonjour à tous,
mon programme suivant ajoute des élements dans mon fichier XML "news.xml" :
mais dans le fichier XML j'ai : (j'ai exécuté 2 fois le programme pour montrer que ça ajoute bien à la suite dans mon XML)
au lieu de m'écrire "<" ou ">", j'ai au contraire "<" et ">" à la place.
j'ai beau chercher je n'arrive pas a avoir le bon résultat. pouvez-vous me guider pour solutionner le problème ? Merci !
Je travaille avec Visual Studio Community 2015
ps : je suis un débutant en C#
Message édité par recep le 25-11-2016 à 10:08:09