LINQ XML - LinQ教程

LINQ到XML提供易于访问所有的LINQ功能类似于标准查询操作,编程接口等。 集成在.NET框架的LINQ to XML也使得物尽其用的.NET框架的功能像调试,编译时检查,强类型。

LINQ 到 XML介绍

虽然使用LINQ 到 XML,加载XML文档到内存容易,更容易被查询和修改文档。另外,也可以保存在现有的存储器磁盘的XML文档,并对其进行序列化。它省去了一个开发人员学习XML查询语言这是有点复杂的。

LINQ到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

使用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 = @"<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的上述代码被编译和执行时,它产生了以下结果:

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

Press any key to continue.