Le fichier XML est un format de fichier couramment utilisé. Cet article présente principalement trois méthodes d'implémentation permettant à C# de lire XML, principalement XmlDocument, XmlTextReader et Linq to Xml. Ceux qui sont intéressés peuvent en savoir plus.
Avant-propos
Le fichier XML est un format de fichier couramment utilisé, tel que app.config dans WinForm et web.config dans les programmes Web. trouvé dans des documents et dans de nombreux endroits importants. (Similaire à Json) Microsoft fournit également une série de bibliothèques de classes pour nous aider à stocker des fichiers XML dans des applications
Il existe généralement deux modèles pour accéder et utiliser des fichiers XML dans des programmes :
DOM (Document Object Model) :Les avantages de l'utilisation de DOM sont qu'il permet l'édition et la mise à jour de documents XML, un accès aléatoire aux données du document et la possibilité d'effectuer des requêtes à l'aide de XPath. , mais l'inconvénient du DOM est qu'il doit charger l'intégralité du document en mémoire en une seule fois, ce qui peut entraîner des problèmes de ressources pour les documents volumineux.
Modèle Stream : Le modèle stream résout très bien ce problème, car il utilise la notion de stream pour accéder aux fichiers XML, c'est-à-dire uniquement au nœud courant, mais il a aussi Ses inconvénients sont qu'il est en lecture seule, en avant uniquement et ne peut pas effectuer d'opérations de navigation vers l'arrière dans le document.
Les trois méthodes de lecture des fichiers XML en C# sont les suivantes :
1 Utiliser XmlDocument (mode DOM)
Utilisez le mode XmlDocument pour lire
L'utilisation de XmlDocument est un moyen de lire des fichiers XML basé sur le modèle de structure de document. Dans un fichier XML, nous pouvons considérer XML comme constitué d'une déclaration de document (Declare), d'un élément (Element) et. un attribut (Attribute), un arbre composé de texte (Texte), etc. Le premier nœud est appelé nœud racine, et chaque nœud peut avoir ses propres nœuds enfants. Après avoir obtenu un nœud, il peut être obtenu via une série d'attributs. ou méthodes La valeur de ce nœud ou d'autres attributs :xn 代表一个结点 xn.Name;//这个结点的名称 xn.Value;//这个结点的值 xn.ChildNodes;//这个结点的所有子结点 xn.ParentNode;//这个结点的父结点
Lire toutes les données
Lors de son utilisation, déclarez d'abord un objet XmlDocument, puis appelez la méthode Load pour charger le fichier XML à partir du chemin spécifié
.
#region XmlDocument读取 public static void XmlDocumentReadDemo() { //list List<BookModel> bookModeList = new List<BookModel>(); //使用的时候,首先声明一个XmlDocument对象,然后调用Load方法,从指定的路径加载XML文件. XmlDocument doc = new XmlDocument(); XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreComments = true;//忽略文档里面的注释 using (XmlReader reader = XmlReader.Create(@"d:/demo.xml", settings)) { doc.Load(reader); //doc.Load(@"d:/demo.xml"); //然后可以通过调用SelectSingleNode得到指定的结点,通过GetAttribute得到具体的属性值.参看下面的代码 // 得到根节点bookstore XmlNode xn = doc.SelectSingleNode("bookstore"); // 得到根节点的所有子节点 XmlNodeList xnl = xn.ChildNodes; foreach (XmlNode xn1 in xnl) { BookModel bookModel = new BookModel(); // 将节点转换为元素,便于得到节点的属性值 XmlElement xe = (XmlElement)xn1; // 得到Type和ISBN两个属性的属性值 bookModel.BookISBN = xe.GetAttribute("ISBN").ToString(); bookModel.BookType = xe.GetAttribute("Type").ToString(); // 得到Book节点的所有子节点 XmlNodeList xnl0 = xe.ChildNodes; bookModel.BookName = xnl0.Item(0).InnerText; bookModel.BookAuthor = xnl0.Item(1).InnerText; bookModel.BookPrice = Convert.ToDouble(xnl0.Item(2).InnerText); bookModeList.Add(bookModel); } } bookModeList.Add(new BookModel()); } #endregion XmlDocument读取
Utilisez XmlTextReader pour lire
Lorsque vous utilisez XmlTextReader pour lire des données, créez d'abord un flux, puis utilisez la méthode read() pour lire en continu vers le bas et effectuez les opérations correspondantes en fonction du type de nœud lu As. suit :
#region XmlTextReaderDemo public static void XmlTextReaderDemo() { XmlTextReader reader = new XmlTextReader(@"d:/demo.xml"); List<BookModel> modelList = new List<BookModel>(); BookModel model = new BookModel(); while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { if (reader.Name == "book") { model.BookType = reader.GetAttribute("Type"); model.BookISBN = reader.GetAttribute("ISBN"); } if (reader.Name == "title") { model.BookName = reader.ReadElementContentAsString(); } if (reader.Name == "author") { model.BookAuthor = reader.ReadElementString().Trim(); } if (reader.Name == "price") { model.BookPrice = Convert.ToDouble(reader.ReadElementString().Trim()); } //for(int i=0;i<reader.AttributeCount;i++) //{ // reader.MoveToAttribute(i); //} } if (reader.NodeType == XmlNodeType.EndElement) { modelList.Add(model); model = new BookModel(); } } reader.Close(); modelList.Add(new BookModel()); } #endregion XmlTextReaderDemo
Utilisez Linq to Xml pour lire
Linq est C# 3.0 Une nouvelle fonctionnalité apparue dans , vous pouvez l'utiliser pour exploiter facilement de nombreuses sources de données, y compris les fichiers XML. L'utilisation de Linq pour exploiter des fichiers XML est très pratique et relativement simple.#region 读取所有的数据 XElement xe = XElement.Load(@"d:/demoLinq.xml"); //xe.Descendants var elements = from ele in xe.Elements() select ele; List<BookModel> modelList = new List<BookModel>(); foreach (var ele in elements) { BookModel model = new BookModel(); model.BookAuthor = ele.Element("author").Value; model.BookName = ele.Element("title").Value; model.BookPrice = Convert.ToDouble(ele.Element("price").Value); model.BookISBN = ele.Attribute("ISBN").Value; model.BookType = ele.Attribute("Type").Value; modelList.Add(model); } modelList.Add(new BookModel()); #endregion 读取所有的数据
Résumé
1. L'avantage de la méthode XmlDocument est qu'elle est facile à trouver 2 La méthode XmlTextReader est une méthode de lecture de flux qui utilise. moins de mémoire 3. La dernière méthode de Linq to cn) !