Lecture de données à partir de XML

Je prévois d’utiliser XML pour la firebase database. La seule chose que j’ai pu faire est de lire le fichier XML en entier. Je veux pouvoir lire seulement certaines données et je ne sais pas comment le faire.

Voici un simple XML

  Animals J. Anderson   Car L. Sawer   

Je suis intéressé par l’application où la sortie va être

 Books: Animals Cars Authors: J. Anderson L. Sawer 

Je veux juste apprendre comment lire des données spécifiques à partir de XML pas un fichier complet.

[RESOLU] J’ai utilisé Linq to XML

Je ne pense pas que vous puissiez “légalement” charger seulement une partie d’un fichier XML, car ce serait alors mal formé (il y aurait un élément de fermeture manquant quelque part).

En utilisant LINQ-to-XML, vous pouvez faire var doc = XDocument.Load("yourfilepath") . À partir de là, il vous suffit d’interroger les données que vous souhaitez, par exemple:

 var authors = doc.Root.Elements().Select( x => x.Element("Author") ); 

HTH.

MODIFIER:

Ok, juste pour en faire un meilleur échantillon, essayez ceci (avec l’amélioration suggérée par @ JWL_):

 using System; using System.Xml.Linq; namespace ConsoleApplication1 { class Program { static void Main( ssortingng[] args ) { XDocument doc = XDocument.Load( "XMLFile1.xml" ); var authors = doc.Descendants( "Author" ); foreach ( var author in authors ) { Console.WriteLine( author.Value ); } Console.ReadLine(); } } } 

Vous devrez ajuster le chemin dans XDocument.Load() pour qu’il pointe vers votre fichier XML, mais le rest devrait fonctionner. Posez des questions sur les parties que vous ne comprenez pas.

Selon le commentaire de @Jon Skeet, vous ne devriez utiliser un XmlReader que si votre fichier est très volumineux. Voici comment l’utiliser. En supposant que vous avez un cours de livre

 public class Book { public ssortingng Title {get; set;} public ssortingng Author {get; set;} } 

vous pouvez lire ligne par ligne le fichier XML avec une petite empreinte mémoire, comme ceci:

 public static class XmlHelper { public static IEnumerable StreamBooks(ssortingng uri) { using (XmlReader reader = XmlReader.Create(uri)) { ssortingng title = null; ssortingng author = null; reader.MoveToContent(); while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element && reader.Name == "Book") { while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element && reader.Name == "Title") { title = reader.ReadSsortingng(); break; } } while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element && reader.Name == "Author") { author =reader.ReadSsortingng(); break; } } yield return new Book() {Title = title, Author = author}; } } } } 

Exemple d’utilisation:

 ssortingng uri = @"c:\test.xml"; // your big XML file foreach (var book in XmlHelper.StreamBooks(uri)) { Console.WriteLine("Title, Author: {0}, {1}", book.Title, book.Author); } 

Vous pouvez également utiliser XPathNavigator:

 XmlDocument doc = new XmlDocument(); doc.LoadXml(xml); XPathNavigator navigator = doc.CreateNavigator(); ssortingng books = GetSsortingngValues("Books: ", navigator, "//Book/Title"); ssortingng authors = GetSsortingngValues("Authors: ", navigator, "//Book/Author"); 

..

 ///  /// Gets the ssortingng values. ///  /// The description. /// The navigator. /// The xpath. ///  private static ssortingng GetSsortingngValues(ssortingng description, XPathNavigator navigator, ssortingng xpath) { SsortingngBuilder sb = new SsortingngBuilder(); sb.Append(description); XPathNodeIterator bookNodesIterator = navigator.Select(xpath); while (bookNodesIterator.MoveNext()) sb.Append(ssortingng.Format("{0} ", bookNodesIterator.Current.Value)); return sb.ToSsortingng(); } 

Essayez la méthode GetElementsByTagName de la classe XMLDocument pour lire des données spécifiques ou la méthode LoadXml pour lire toutes les données dans un document XML.