XML-Datei ist ein häufig verwendetes Dateiformat. In diesem Artikel werden hauptsächlich drei Implementierungsmethoden für C# zum Lesen von XML vorgestellt, hauptsächlich XmlDocument, XmlTextReader und Linq to Xml.
Vorwort
XML-Dateien sind ein häufig verwendetes Dateiformat, z. B. app.config in WinForm und web.config in Webprogrammen gefunden in Dokumenten und an vielen wichtigen Orten. (Ähnlich wie Json) Microsoft stellt auch eine Reihe von Klassenbibliotheken zur Verfügung, die uns beim Speichern von XML-Dateien in Anwendungen helfen
Es gibt im Allgemeinen zwei Modelle für den Zugriff auf und die Bedienung von XML-Dateien in Programmen:
DOM (Document Object Model):Die Vorteile der Verwendung von DOM bestehen darin, dass es die Bearbeitung und Aktualisierung von XML-Dokumenten, den wahlfreien Zugriff auf Daten im Dokument und die Möglichkeit zur Abfrage mit XPath ermöglicht , aber Der Nachteil von DOM besteht darin, dass das gesamte Dokument auf einmal in den Speicher geladen werden muss, was bei großen Dokumenten zu Ressourcenproblemen führen kann.
Stream-Modell: Das Stream-Modell löst dieses Problem sehr gut, da es das Konzept des Streams verwendet, um auf XML-Dateien zuzugreifen, dh nur auf den aktuellen Knoten, aber auch auf ihn Seine Mängel sind, dass es schreibgeschützt und nur vorwärts ist und keine Rückwärtsnavigation im Dokument ausführen kann.
Die drei Methoden zum Lesen von XML-Dateien in C# sind wie folgt:
1. Verwenden Sie XmlDocument (DOM-Modus)
2 .Verwenden Sie XmlTextReader (Stream-Modus)
3. Verwenden Sie Linq to XML (Linq-Modus)
Verwenden Sie den XmlDocument-Modus zum Lesen
Die Verwendung von XmlDocument ist eine Möglichkeit, XML-Dateien basierend auf dem Dokumentstrukturmodell zu lesen. In einer XML-Datei können wir uns XML als bestehend aus einer Dokumentdeklaration (Declare), einem Element (Element) und vorstellen ein Attribut (Attribut), ein aus Text (Text) usw. bestehender Baum. Der erste Knoten wird als Wurzelknoten bezeichnet, und jeder Knoten kann seine eigenen untergeordneten Knoten haben. Nach dem Abrufen eines Knotens kann dieser über eine Reihe von Attributen abgerufen werden oder Methoden Der Wert dieses Knotens oder einiger anderer Attribute. Zum Beispiel:
xn 代表一个结点 xn.Name;//这个结点的名称 xn.Value;//这个结点的值 xn.ChildNodes;//这个结点的所有子结点 xn.ParentNode;//这个结点的父结点
Alle Daten lesen
Deklarieren Sie bei der Verwendung zunächst ein XmlDocument-Objekt und rufen Sie dann die Load-Methode auf, um die XML-Datei aus dem angegebenen Pfad zu laden
BookModel ist ein Buchmodell
#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读取
Die laufenden Ergebnisse sind wie folgt:
Verwenden Sie XmlTextReader zum Lesen
Wenn Sie XmlTextReader zum Lesen von Daten verwenden, erstellen Sie zunächst einen Stream, verwenden Sie dann die Methode read (), um kontinuierlich nach unten zu lesen, und führen Sie entsprechende Vorgänge entsprechend der Art des gelesenen Knotens aus folgt:
#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
Verwenden Sie Linq to XML, um
zu lesen Linq ist eine neue Funktion in C# 3.0, mit der Sie viele Datenquellen, einschließlich XML-Dateien, problemlos bedienen können. Die Verwendung von Linq zum Betrieb von XML-Dateien ist sehr praktisch und relativ einfach.
muss mit System.Linq referenziert werden;mit System.Xml.Linq;
#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 读取所有的数据
Zusammenfassung
1. Der Vorteil der XmlDocument-Methode besteht darin, dass sie leicht zu finden ist.
2. Die XmlTextReader-Methode ist eine Stream-Lesemethode, die verwendet wird weniger Speicher
3. Die neueste Methode von Linq to cn)!