XDocument vs XmlDocument

cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008 - 17 août 2007 à 18:20
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008 - 18 août 2007 à 21:20
Bonjour,

J'utilise de plus en plus les XDocument à la place des XmlDocument.

Le problème est qu'il y a certaines manipulations possibles avec un XmlDocument qui ne le sont plus avec un XDocument (ou bien je ne sais pas comment faire). Par exemple, je ne vois pas de propriété innerXml pour un XElement. Je ne vois pas non plus comment obtenir un élément XText qui serait le contenu text d'un XElement. La seule technique j'ai trouvé pour le moment est charger un XmlDocument à partir de mon instance de Xdocument quand j'ai besoin des fonctionnalités de XmlDocument puis de repasser à un XDocument quand j'ai fini ces manipulations. Mais ça m'embête pas mal de devoir passer d'un XDocument à un XmlDocument et
inversement juste parce que certaines fonctionnalités sont disponibles
dans l'un mais pas dans l'autre... Et la performance en prend un coup !

L'idéal serait des méthodes d'extensions pour les XElement qui permettent de faire tous ce qu'on peux faire  avec les XmlElement. Quelqu'un en connais ?

Merci d'avance,
Mathmax

4 réponses

romagny13 Messages postés 687 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 27 août 2014 3
18 août 2007 à 13:16
il suffit de faire un ToString() pour obtenir le xml
myXDocument.ToString()

exemple :
OpenFileDialog

openFileDialog =
new
OpenFileDialog();

if (openFileDialog.ShowDialog() ==
DialogResult.OK)
{

XDocument xDocument =
XDocument.Load(openFileDialog.FileName);

MessageBox.Show(xDocument.ToString());
}

euu si il me semble que tout ce que l'on peut faire avec un xmldocument on peut le faire avec un XDocument
et même peut etre plus facilement 
on peut aussi filtrer et trier de maniere complexe facilement et faire des "mélanges" (avec requetes Linq)
et la bibliotheque System.Linq.Xml me semble quand même mieux fichue

maintenant c'est vrai aussi que je ne vois pas forcement une raison qui fait qu'il faut absolument utiliser le XDocument plutot que le xmldocument 

tu peux regarder les ressources aussi ici
http://msdn2.microsoft.com/fr-fr/netframework/aa904594.aspx

+

Se poser les bonnes questions ;) 
apporter les réponses
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
18 août 2007 à 19:26
myXDocument.ToString() équivaut à la propriété OuterXml d'un XmlDocument. J'ai besoin d'acceder en lecture et écriture à l'équivalent de InnerXml.
Autre exemple de chôses qu'on l'on ne peut à ma connaissance pas faire un XDocument :
Les méthodes d'extensions : XPathSelectElement et XPathSelectElements  du namespace System.Xml.XPath ne permette d'obtenir que des XElements alors que les méthode SelectSingleNode et SelectNodes permettent d'obtenir n'importe quel élément xml à partir d'une expression xpath. Par conséquent; un telle ligne plante à l'exécution :
XNode node = myXElement.SelectSingleNode("./text()");

Mathmax
0
romagny13 Messages postés 687 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 27 août 2014 3
18 août 2007 à 20:56
a oui
ba je pense que tu dois connaitre la methode static parse :

XDocument xDocument =
XDocument.Parse(
@"<?xml version=""1.0"" encoding=""utf-8""?><Contacts>
<Contact>
<FirstName>Jean</FirstName>
<LastName>Dupond</LastName>
<Gender>H</Gender>
</Contact>
</Contacts>");

valable aussi pour xelement
tu peux regarder aussi au niveau de CreateWriter()

Se poser les bonnes questions ;) 
apporter les réponses
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
18 août 2007 à 21:20
Oui c'est vrai. Je la connaissais mais je n'ai pas pensé à elle.

Par contre pour les méthodes XPathSelectElement et XPathSelectElements ?

Mathmax
0
Rejoignez-nous