Comment lire un fichier xml directement pour obtenir un XElement valeur?
Droit maintenant, je suis en utilisant:
XElement xe = XElement.ReadFrom
qui implique un XmlReader
:
XmlReader reader = XmlTextReader.Create
qui nécessite une chaîne de caractères, et qui m'oblige à passer un StringReader
:
new StringReader
qui nécessite une TextReader/StreamReader
pour enfin être en mesure de passer le chemin d'accès du fichier:
TextReader textReader = new StreamReader ( file );
Est la plus simple façon de le faire? J'ai déjà un code qui utilise un XElement
de sorte qu'il fonctionne bien, mais je veux réduire le nombre d'étapes pour arriver à la XElement
partir d'un fichier xml. Quelque chose comme:
XElement xe = XElement.ReadFrom (string file);
Des idées?
OriginalL'auteur Joan Venge | 2011-02-26
Vous devez vous connecter pour publier un commentaire.
Joan, l'utilisation XDocument.Load(string):
Quelques commentaires:
XmlTextReader.Create
. utilisationXmlReader.Create
. C'est une méthode statique, afin de ne pas faire une différence qui classe dérivée que vous utilisez pour vous y référer. Il est trompeur d'utiliserXmlTextReader.Create
, car on dirait que c'est différent deXmlReader.Create
. Il n'est pas.XmlReader.Create
a une surcharge qui accepte une chaîne de caractères, tout commeXDocument.Load
n':XmlReader.Créer(string inputUri)
.XElement.ReadFrom
. C'est en faitXNode.ReadFrom
.Joan, oui. Il n'y a pas une telle chose comme
XElement.Elements
. C'estXContainer.Elements
. Je suggère fortement que vous commencez à remarquer la classe à laquelle les choses sont définis dans. Nombreux sont héritées.Merci Jean, pour faire des méthodes statiques se laisser à tous les types dérivés? Aussi, vous dit XmlReader.Créer prend une chaîne de caractères, mais ce n'est pas un chemin d'accès au fichier (pour lire le contenu du fichier), droit? Enfin, j'ai maintenant vu que XElement.ReadFrom est XNode.ReadFrom, mais dans ce cas, comment cela apparaît-il sous XElement? Même héritage?
oui, les statistiques sont toujours héritées (en supposant qu'ils ne sont pas
private
). LeXmlReader.Create
surcharge qui prend une chaîne de caractères traite comme un URI, mais "le nom de fichier.typ" est traitée comme un chemin de fichier. Oui, même l'héritage affaire.il n'a pas d'importance.
XDocument.Load(string)
presque certainement appelsusing (XmlReader reader = XmlReader.Create(string)) {return XDocument.Load(reader);}
. En d'autres termes, tout vient finalement à unXmlReader
.OriginalL'auteur John Saunders
Mais explicitement la gestion des flux de fichiers objets et XmlReader objets est le meilleur - vous savoir quand les volets sont fermés...
non, ils ne sont pas de fuite de ressources (ils n'ont jamais une fuite de mémoire dans toutes les circonstances) - c'est juste que les ressources ne seront pas nettoyés jusqu'à ce que le garbage collector obtient finalement autour d'elle.
OriginalL'auteur Alexei Levenkov