LINQ to XML обеспечивает легкий доступ ко всем функциям LINQ, таким как стандартные операторы запросов, интерфейс программирования и т. Д. Интегрированный в платформу .NET, LINQ to XML также наилучшим образом использует функции платформы .NET, такие как отладка, проверка во время компиляции, строгая типизация. и многое другое.
Введение LINQ в XML
При использовании LINQ to XML загрузка документов XML в память становится проще, а запрос и модификация документов упрощаются. Также возможно сохранить XML-документы, существующие в памяти, на диск и сериализовать их. Это устраняет необходимость для разработчика изучать язык запросов XML, который является несколько сложным.
LINQ to XML имеет силу в пространстве имен System.Xml.Linq. Здесь есть все 19 необходимых классов для работы с XML. Эти классы следующие.
- XAttribute
- XCData
- XComment
- XContainer
- XDeclaration
- XDocument
- XDocumentType
- XElement
- XName
- XNamespace
- XNode
- XNodeDocumentOrderComparer
- XNodeEqualityComparer
- XObject
- XObjectChange
- XObjectChangeEventArgs
- XObjectEventHandler
- XProcessingInstruction
- XText
Чтение XML-файла с использованием LINQ
C #
using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; namespace LINQtoXML { class ExampleOfXML { static void Main(string[] args) { string myXML = @"<Departments> <Department>Account</Department> <Department>Sales</Department> <Department>Pre-Sales</Department> <Department>Marketing</Department> </Departments>"; XDocument xdoc = new XDocument(); xdoc = XDocument.Parse(myXML); var result = xdoc.Element("Departments").Descendants(); foreach (XElement item in result) { Console.WriteLine("Department Name - " + item.Value); } Console.WriteLine("\nPress any key to continue."); Console.ReadKey(); } } }
VB
Imports System.Collections.Generic Imports System.Linq Imports System.Xml.Linq Module Module1 Sub Main(ByVal args As String()) Dim myXML As String = "<Departments>" & vbCr & vbLf & "<Department>Account</Department>" & vbCr & vbLf & "<Department>Sales</Department>" & vbCr & vbLf & "<Department>Pre-Sales</Department>" & vbCr & vbLf & "<Department>Marketing</Department>" & vbCr & vbLf & "</Departments>" Dim xdoc As New XDocument() xdoc = XDocument.Parse(myXML) Dim result = xdoc.Element("Departments").Descendants() For Each item As XElement In result Console.WriteLine("Department Name - " + item.Value) Next Console.WriteLine(vbLf & "Press any key to continue.") Console.ReadKey() End Sub End Module
Когда вышеуказанный код C # или VB компилируется и выполняется, он дает следующий результат —
Department Name - Account Department Name - Sales Department Name - Pre-Sales Department Name - Marketing Press any key to continue.
Добавить новый узел
C #
using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; namespace LINQtoXML { class ExampleOfXML { static void Main(string[] args) { string myXML = @"<Departments> <Department>Account</Department> <Department>Sales</Department> <Department>Pre-Sales</Department> <Department>Marketing</Department> </Departments>"; XDocument xdoc = new XDocument(); xdoc = XDocument.Parse(myXML); //Add new Element xdoc.Element("Departments").Add(new XElement("Department", "Finance")); //Add new Element at First xdoc.Element("Departments").AddFirst(new XElement("Department", "Support")); var result = xdoc.Element("Departments").Descendants(); foreach (XElement item in result) { Console.WriteLine("Department Name - " + item.Value); } Console.WriteLine("\nPress any key to continue."); Console.ReadKey(); } } }
VB
Imports System.Collections.Generic Imports System.Linq Imports System.Xml.Linq Module Module1 Sub Main(ByVal args As String()) Dim myXML As String = "<Departments>" & vbCr & vbLf & "<Department>Account</Department>" & vbCr & vbLf & "<Department>Sales</Department>" & vbCr & vbLf & "<Department>Pre-Sales</Department>" & vbCr & vbLf & "<Department>Marketing</Department>" & vbCr & vbLf & "</Departments>" Dim xdoc As New XDocument() xdoc = XDocument.Parse(myXML) xdoc.Element("Departments").Add(New XElement("Department", "Finance")) xdoc.Element("Departments").AddFirst(New XElement("Department", "Support")) Dim result = xdoc.Element("Departments").Descendants() For Each item As XElement In result Console.WriteLine("Department Name - " + item.Value) Next Console.WriteLine(vbLf & "Press any key to continue.") Console.ReadKey() End Sub End Module
Когда вышеуказанный код C # или VB компилируется и выполняется, он дает следующий результат —
Department Name - Support Department Name - Account Department Name - Sales Department Name - Pre-Sales Department Name - Marketing Department Name - Finance Press any key to continue.
Удаление конкретного узла
C #
using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; namespace LINQtoXML { class ExampleOfXML { static void Main(string[] args) { string myXML = @"<Departments> <Department>Support</Department> <Department>Account</Department> <Department>Sales</Department> <Department>Pre-Sales</Department> <Department>Marketing</Department> <Department>Finance</Department> </Departments>"; XDocument xdoc = new XDocument(); xdoc = XDocument.Parse(myXML); //Remove Sales Department xdoc.Descendants().Where(s =>s.Value == "Sales").Remove(); var result = xdoc.Element("Departments").Descendants(); foreach (XElement item in result) { Console.WriteLine("Department Name - " + item.Value); } Console.WriteLine("\nPress any key to continue."); Console.ReadKey(); } } }
VB
Imports System.Collections.Generic Imports System.Linq Imports System.Xml.Linq Module Module1 Sub Main(args As String()) Dim myXML As String = "<Departments>" & vbCr & vbLf & "<Department>Support</Department>" & vbCr & vbLf & "<Department>Account</Department>" & vbCr & vbLf & "<Department>Sales</Department>" & vbCr & vbLf & "<Department>Pre-Sales</Department>" & vbCr & vbLf & "<Department>Marketing</Department>" & vbCr & vbLf & "<Department>Finance</Department>" & vbCr & vbLf & "</Departments>" Dim xdoc As New XDocument() xdoc = XDocument.Parse(myXML) xdoc.Descendants().Where(Function(s) s.Value = "Sales").Remove() Dim result = xdoc.Element("Departments").Descendants() For Each item As XElement In result Console.WriteLine("Department Name - " + item.Value) Next Console.WriteLine(vbLf & "Press any key to continue.") Console.ReadKey() End Sub End Module
Когда вышеуказанный код C # или VB компилируется и выполняется, он дает следующий результат —