📜  LINQ-XML

📅  最后修改于: 2020-11-21 07:08:36             🧑  作者: Mango


LINQ to XML提供了对所有LINQ功能(如标准查询运算符,编程接口等)的轻松访问。集成在.NET框架中的LINQ to XML还充分利用了.NET框架功能,如调试,编译时检查,强类型化还有更多要说的。

LINQ到XML的介绍

在使用LINQ to XML时,将XML文档加载到内存很容易,并且查询和文档修改也更加容易。也可以将内存中存在的XML文档保存到磁盘并进行序列化。它消除了开发人员学习稍微复杂的XML查询语言的需要。

LINQ to XML在System.Xml.Linq命名空间中具有强大的功能。它具有使用XML所需的全部19个必需类。这些类是以下类。

  • XAttribute
  • XC数据
  • XComment
  • X容器
  • X声明
  • XDocument
  • XDocumentType
  • X元素
  • X名称
  • X命名空间
  • XNode
  • XNodeDocumentOrderComparer
  • XNodeEqualityComparer
  • X对象
  • XObjectChange
  • XObjectChangeEventArgs
  • XObjectEventHandler
  • XProcessing指令
  • XText

使用LINQ读取XML文件

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 = @"
                       Account
                       Sales
                       Pre-Sales
                       Marketing
                       ";

         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 = "" & vbCr & vbLf & 
                           "Account" & vbCr & vbLf & 
                           "Sales" & vbCr & vbLf & 
                           "Pre-Sales" & vbCr & vbLf & 
                           "Marketing" & vbCr & vbLf & 
                           ""

      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 = @"
                       Account
                       Sales
                       Pre-Sales
                       Marketing
                       ";

         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 = "" & vbCr & vbLf & 
                            "Account" & vbCr & vbLf & 
                            "Sales" & vbCr & vbLf & 
                            "Pre-Sales" & vbCr & vbLf & 
                            "Marketing" & vbCr & vbLf & 
                            ""

      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 = @"
                       Support
                       Account
                       Sales
                       Pre-Sales
                       Marketing
                       Finance
                       ";

         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 = "" & vbCr & vbLf & 
                            "Support" & vbCr & vbLf & 
                            "Account" & vbCr & vbLf & 
                            "Sales" & vbCr & vbLf & 
                            "Pre-Sales" & vbCr & vbLf & 
                            "Marketing" & vbCr & vbLf & 
                            "Finance" & vbCr & vbLf & 
                           ""

      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的代码时,将产生以下结果-

Department Name - Support
Department Name - Account
Department Name - Pre-Sales
Department Name - Marketing
Department Name - Finance

Press any key to continue.