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
- XCData
- XComment
- XContainer
- XDeclaration
- XDocument
- XDocumentType
- XElement
- XName
- XNamespace
- XNode
- XNodeDocumentOrderComparer
- XNodeEqualityComparer
- XObject
- XObjectChange
- XObjectChangeEventArgs
- XObjectEventHandler
- XProcessingInstruction
- XText
读取XML文件
C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
namespace LINQtoXML {
class ExampleOfXML {
static void Main(string[] args) {
</span><span class="kwd">string</span><span class="pln"> myXML </span><span class="pun">=</span><span class="pln"> </span><span class="pun">@</span><span class="str">"<Departments>
<Department>Account</Department>
<Department>Sales</Department>
<Department>Pre-Sales</Department>
<Department>Marketing</Department>
</Departments>"</span><span class="pun">;</span><span class="pln">
</span><span class="typ">XDocument</span><span class="pln"> xdoc </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">XDocument</span><span class="pun">();</span><span class="pln">
xdoc </span><span class="pun">=</span><span class="pln"> </span><span class="typ">XDocument</span><span class="pun">.</span><span class="typ">Parse</span><span class="pun">(</span><span class="pln">myXML</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">var</span><span class="pln"> result </span><span class="pun">=</span><span class="pln"> xdoc</span><span class="pun">.</span><span class="typ">Element</span><span class="pun">(</span><span class="str">"Departments"</span><span class="pun">).</span><span class="typ">Descendants</span><span class="pun">();</span><span class="pln">
</span><span class="kwd">foreach</span><span class="pln"> </span><span class="pun">(</span><span class="typ">XElement</span><span class="pln"> item </span><span class="kwd">in</span><span class="pln"> result</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="typ">Console</span><span class="pun">.</span><span class="typ">WriteLine</span><span class="pun">(</span><span class="str">"Department Name - "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> item</span><span class="pun">.</span><span class="typ">Value</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="typ">Console</span><span class="pun">.</span><span class="typ">WriteLine</span><span class="pun">(</span><span class="str">"\nPress any key to continue."</span><span class="pun">);</span><span class="pln">
</span><span class="typ">Console</span><span class="pun">.</span><span class="typ">ReadKey</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
}
}
VB
Imports System.Collections.Generic
Imports System.Linq
Imports System.Xml.Linq
Module Module1
Sub Main(ByVal args As String())
</span><span class="typ">Dim</span><span class="pln"> myXML </span><span class="typ">As</span><span class="pln"> </span><span class="typ">String</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"<Departments>"</span><span class="pln"> </span><span class="pun">&</span><span class="pln"> vbCr </span><span class="pun">&</span><span class="pln"> vbLf </span><span class="pun">&</span><span class="pln">
</span><span class="str">"<Department>Account</Department>"</span><span class="pln"> </span><span class="pun">&</span><span class="pln"> vbCr </span><span class="pun">&</span><span class="pln"> vbLf </span><span class="pun">&</span><span class="pln">
</span><span class="str">"<Department>Sales</Department>"</span><span class="pln"> </span><span class="pun">&</span><span class="pln"> vbCr </span><span class="pun">&</span><span class="pln"> vbLf </span><span class="pun">&</span><span class="pln">
</span><span class="str">"<Department>Pre-Sales</Department>"</span><span class="pln"> </span><span class="pun">&</span><span class="pln"> vbCr </span><span class="pun">&</span><span class="pln"> vbLf </span><span class="pun">&</span><span class="pln">
</span><span class="str">"<Department>Marketing</Department>"</span><span class="pln"> </span><span class="pun">&</span><span class="pln"> vbCr </span><span class="pun">&</span><span class="pln"> vbLf </span><span class="pun">&</span><span class="pln">
</span><span class="str">"</Departments>"</span><span class="pln">
</span><span class="typ">Dim</span><span class="pln"> xdoc </span><span class="typ">As</span><span class="pln"> </span><span class="typ">New</span><span class="pln"> </span><span class="typ">XDocument</span><span class="pun">()</span><span class="pln">
xdoc </span><span class="pun">=</span><span class="pln"> </span><span class="typ">XDocument</span><span class="pun">.</span><span class="typ">Parse</span><span class="pun">(</span><span class="pln">myXML</span><span class="pun">)</span><span class="pln">
</span><span class="typ">Dim</span><span class="pln"> result </span><span class="pun">=</span><span class="pln"> xdoc</span><span class="pun">.</span><span class="typ">Element</span><span class="pun">(</span><span class="str">"Departments"</span><span class="pun">).</span><span class="typ">Descendants</span><span class="pun">()</span><span class="pln">
</span><span class="typ">For</span><span class="pln"> </span><span class="typ">Each</span><span class="pln"> item </span><span class="typ">As</span><span class="pln"> </span><span class="typ">XElement</span><span class="pln"> </span><span class="typ">In</span><span class="pln"> result
</span><span class="typ">Console</span><span class="pun">.</span><span class="typ">WriteLine</span><span class="pun">(</span><span class="str">"Department Name - "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> item</span><span class="pun">.</span><span class="typ">Value</span><span class="pun">)</span><span class="pln">
</span><span class="typ">Next</span><span class="pln">
</span><span class="typ">Console</span><span class="pun">.</span><span class="typ">WriteLine</span><span class="pun">(</span><span class="pln">vbLf </span><span class="pun">&</span><span class="pln"> </span><span class="str">"Press any key to continue."</span><span class="pun">)</span><span class="pln">
</span><span class="typ">Console</span><span class="pun">.</span><span class="typ">ReadKey</span><span class="pun">()</span><span class="pln">
End Sub
End Module
编译并执行以上C#或VB的代码时,将产生以下输出-
Department Name - Account Department Name - Sales Department Name - Pre-Sales Department Name - MarketingPress 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) {
</span><span class="kwd">string</span><span class="pln"> myXML </span><span class="pun">=</span><span class="pln"> </span><span class="pun">@</span><span class="str">"<Departments>
<Department>Account</Department>
<Department>Sales</Department>
<Department>Pre-Sales</Department>
<Department>Marketing</Department>
</Departments>"</span><span class="pun">;</span><span class="pln">
</span><span class="typ">XDocument</span><span class="pln"> xdoc </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">XDocument</span><span class="pun">();</span><span class="pln">
xdoc </span><span class="pun">=</span><span class="pln"> </span><span class="typ">XDocument</span><span class="pun">.</span><span class="typ">Parse</span><span class="pun">(</span><span class="pln">myXML</span><span class="pun">);</span><span class="pln">
</span><span class="com">//Add new Element</span><span class="pln">
xdoc</span><span class="pun">.</span><span class="typ">Element</span><span class="pun">(</span><span class="str">"Departments"</span><span class="pun">).</span><span class="typ">Add</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">XElement</span><span class="pun">(</span><span class="str">"Department"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Finance"</span><span class="pun">));</span><span class="pln">
</span><span class="com">//Add new Element at First</span><span class="pln">
xdoc</span><span class="pun">.</span><span class="typ">Element</span><span class="pun">(</span><span class="str">"Departments"</span><span class="pun">).</span><span class="typ">AddFirst</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">XElement</span><span class="pun">(</span><span class="str">"Department"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Support"</span><span class="pun">));</span><span class="pln">
</span><span class="kwd">var</span><span class="pln"> result </span><span class="pun">=</span><span class="pln"> xdoc</span><span class="pun">.</span><span class="typ">Element</span><span class="pun">(</span><span class="str">"Departments"</span><span class="pun">).</span><span class="typ">Descendants</span><span class="pun">();</span><span class="pln">
</span><span class="kwd">foreach</span><span class="pln"> </span><span class="pun">(</span><span class="typ">XElement</span><span class="pln"> item </span><span class="kwd">in</span><span class="pln"> result</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="typ">Console</span><span class="pun">.</span><span class="typ">WriteLine</span><span class="pun">(</span><span class="str">"Department Name - "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> item</span><span class="pun">.</span><span class="typ">Value</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="typ">Console</span><span class="pun">.</span><span class="typ">WriteLine</span><span class="pun">(</span><span class="str">"\nPress any key to continue."</span><span class="pun">);</span><span class="pln">
</span><span class="typ">Console</span><span class="pun">.</span><span class="typ">ReadKey</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
}
}
VB
Imports System.Collections.Generic
Imports System.Linq
Imports System.Xml.Linq
Module Module1
Sub Main(ByVal args As String())
</span><span class="typ">Dim</span><span class="pln"> myXML </span><span class="typ">As</span><span class="pln"> </span><span class="typ">String</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"<Departments>"</span><span class="pln"> </span><span class="pun">&</span><span class="pln"> vbCr </span><span class="pun">&</span><span class="pln"> vbLf </span><span class="pun">&</span><span class="pln">
</span><span class="str">"<Department>Account</Department>"</span><span class="pln"> </span><span class="pun">&</span><span class="pln"> vbCr </span><span class="pun">&</span><span class="pln"> vbLf </span><span class="pun">&</span><span class="pln">
</span><span class="str">"<Department>Sales</Department>"</span><span class="pln"> </span><span class="pun">&</span><span class="pln"> vbCr </span><span class="pun">&</span><span class="pln"> vbLf </span><span class="pun">&</span><span class="pln">
</span><span class="str">"<Department>Pre-Sales</Department>"</span><span class="pln"> </span><span class="pun">&</span><span class="pln"> vbCr </span><span class="pun">&</span><span class="pln"> vbLf </span><span class="pun">&</span><span class="pln">
</span><span class="str">"<Department>Marketing</Department>"</span><span class="pln"> </span><span class="pun">&</span><span class="pln"> vbCr </span><span class="pun">&</span><span class="pln"> vbLf </span><span class="pun">&</span><span class="pln">
</span><span class="str">"</Departments>"</span><span class="pln">
</span><span class="typ">Dim</span><span class="pln"> xdoc </span><span class="typ">As</span><span class="pln"> </span><span class="typ">New</span><span class="pln"> </span><span class="typ">XDocument</span><span class="pun">()</span><span class="pln">
xdoc </span><span class="pun">=</span><span class="pln"> </span><span class="typ">XDocument</span><span class="pun">.</span><span class="typ">Parse</span><span class="pun">(</span><span class="pln">myXML</span><span class="pun">)</span><span class="pln">
xdoc</span><span class="pun">.</span><span class="typ">Element</span><span class="pun">(</span><span class="str">"Departments"</span><span class="pun">).</span><span class="typ">Add</span><span class="pun">(</span><span class="typ">New</span><span class="pln"> </span><span class="typ">XElement</span><span class="pun">(</span><span class="str">"Department"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Finance"</span><span class="pun">))</span><span class="pln">
xdoc</span><span class="pun">.</span><span class="typ">Element</span><span class="pun">(</span><span class="str">"Departments"</span><span class="pun">).</span><span class="typ">AddFirst</span><span class="pun">(</span><span class="typ">New</span><span class="pln"> </span><span class="typ">XElement</span><span class="pun">(</span><span class="str">"Department"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Support"</span><span class="pun">))</span><span class="pln">
</span><span class="typ">Dim</span><span class="pln"> result </span><span class="pun">=</span><span class="pln"> xdoc</span><span class="pun">.</span><span class="typ">Element</span><span class="pun">(</span><span class="str">"Departments"</span><span class="pun">).</span><span class="typ">Descendants</span><span class="pun">()</span><span class="pln">
</span><span class="typ">For</span><span class="pln"> </span><span class="typ">Each</span><span class="pln"> item </span><span class="typ">As</span><span class="pln"> </span><span class="typ">XElement</span><span class="pln"> </span><span class="typ">In</span><span class="pln"> result
</span><span class="typ">Console</span><span class="pun">.</span><span class="typ">WriteLine</span><span class="pun">(</span><span class="str">"Department Name - "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> item</span><span class="pun">.</span><span class="typ">Value</span><span class="pun">)</span><span class="pln">
</span><span class="typ">Next</span><span class="pln">
</span><span class="typ">Console</span><span class="pun">.</span><span class="typ">WriteLine</span><span class="pun">(</span><span class="pln">vbLf </span><span class="pun">&</span><span class="pln"> </span><span class="str">"Press any key to continue."</span><span class="pun">)</span><span class="pln">
</span><span class="typ">Console</span><span class="pun">.</span><span class="typ">ReadKey</span><span class="pun">()</span><span class="pln">
End Sub
End Module
编译并执行以上C#或VB的代码时,将产生以下输出-
Department Name - Support Department Name - Account Department Name - Sales Department Name - Pre-Sales Department Name - Marketing Department Name - FinancePress 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) {
</span><span class="kwd">string</span><span class="pln"> myXML </span><span class="pun">=</span><span class="pln"> </span><span class="pun">@</span><span class="str">"<Departments>
<Department>Support</Department>
<Department>Account</Department>
<Department>Sales</Department>
<Department>Pre-Sales</Department>
<Department>Marketing</Department>
<Department>Finance</Department>
</Departments>"</span><span class="pun">;</span><span class="pln">
</span><span class="typ">XDocument</span><span class="pln"> xdoc </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">XDocument</span><span class="pun">();</span><span class="pln">
xdoc </span><span class="pun">=</span><span class="pln"> </span><span class="typ">XDocument</span><span class="pun">.</span><span class="typ">Parse</span><span class="pun">(</span><span class="pln">myXML</span><span class="pun">);</span><span class="pln">
</span><span class="com">//Remove Sales Department</span><span class="pln">
xdoc</span><span class="pun">.</span><span class="typ">Descendants</span><span class="pun">().</span><span class="typ">Where</span><span class="pun">(</span><span class="pln">s </span><span class="pun">=></span><span class="pln">s</span><span class="pun">.</span><span class="typ">Value</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="str">"Sales"</span><span class="pun">).</span><span class="typ">Remove</span><span class="pun">();</span><span class="pln">
</span><span class="kwd">var</span><span class="pln"> result </span><span class="pun">=</span><span class="pln"> xdoc</span><span class="pun">.</span><span class="typ">Element</span><span class="pun">(</span><span class="str">"Departments"</span><span class="pun">).</span><span class="typ">Descendants</span><span class="pun">();</span><span class="pln">
</span><span class="kwd">foreach</span><span class="pln"> </span><span class="pun">(</span><span class="typ">XElement</span><span class="pln"> item </span><span class="kwd">in</span><span class="pln"> result</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="typ">Console</span><span class="pun">.</span><span class="typ">WriteLine</span><span class="pun">(</span><span class="str">"Department Name - "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> item</span><span class="pun">.</span><span class="typ">Value</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="typ">Console</span><span class="pun">.</span><span class="typ">WriteLine</span><span class="pun">(</span><span class="str">"\nPress any key to continue."</span><span class="pun">);</span><span class="pln">
</span><span class="typ">Console</span><span class="pun">.</span><span class="typ">ReadKey</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
}
}
VB
Imports System.Collections.Generic
Imports System.Linq
Imports System.Xml.Linq
Module Module1
Sub Main(args As String())
</span><span class="typ">Dim</span><span class="pln"> myXML </span><span class="typ">As</span><span class="pln"> </span><span class="typ">String</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"<Departments>"</span><span class="pln"> </span><span class="pun">&</span><span class="pln"> vbCr </span><span class="pun">&</span><span class="pln"> vbLf </span><span class="pun">&</span><span class="pln">
</span><span class="str">"<Department>Support</Department>"</span><span class="pln"> </span><span class="pun">&</span><span class="pln"> vbCr </span><span class="pun">&</span><span class="pln"> vbLf </span><span class="pun">&</span><span class="pln">
</span><span class="str">"<Department>Account</Department>"</span><span class="pln"> </span><span class="pun">&</span><span class="pln"> vbCr </span><span class="pun">&</span><span class="pln"> vbLf </span><span class="pun">&</span><span class="pln">
</span><span class="str">"<Department>Sales</Department>"</span><span class="pln"> </span><span class="pun">&</span><span class="pln"> vbCr </span><span class="pun">&</span><span class="pln"> vbLf </span><span class="pun">&</span><span class="pln">
</span><span class="str">"<Department>Pre-Sales</Department>"</span><span class="pln"> </span><span class="pun">&</span><span class="pln"> vbCr </span><span class="pun">&</span><span class="pln"> vbLf </span><span class="pun">&</span><span class="pln">
</span><span class="str">"<Department>Marketing</Department>"</span><span class="pln"> </span><span class="pun">&</span><span class="pln"> vbCr </span><span class="pun">&</span><span class="pln"> vbLf </span><span class="pun">&</span><span class="pln">
</span><span class="str">"<Department>Finance</Department>"</span><span class="pln"> </span><span class="pun">&</span><span class="pln"> vbCr </span><span class="pun">&</span><span class="pln"> vbLf </span><span class="pun">&</span><span class="pln">
</span><span class="str">"</Departments>"</span><span class="pln">
</span><span class="typ">Dim</span><span class="pln"> xdoc </span><span class="typ">As</span><span class="pln"> </span><span class="typ">New</span><span class="pln"> </span><span class="typ">XDocument</span><span class="pun">()</span><span class="pln">
xdoc </span><span class="pun">=</span><span class="pln"> </span><span class="typ">XDocument</span><span class="pun">.</span><span class="typ">Parse</span><span class="pun">(</span><span class="pln">myXML</span><span class="pun">)</span><span class="pln">
xdoc</span><span class="pun">.</span><span class="typ">Descendants</span><span class="pun">().</span><span class="typ">Where</span><span class="pun">(</span><span class="typ">Function</span><span class="pun">(</span><span class="pln">s</span><span class="pun">)</span><span class="pln"> s</span><span class="pun">.</span><span class="typ">Value</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"Sales"</span><span class="pun">).</span><span class="typ">Remove</span><span class="pun">()</span><span class="pln">
</span><span class="typ">Dim</span><span class="pln"> result </span><span class="pun">=</span><span class="pln"> xdoc</span><span class="pun">.</span><span class="typ">Element</span><span class="pun">(</span><span class="str">"Departments"</span><span class="pun">).</span><span class="typ">Descendants</span><span class="pun">()</span><span class="pln">
</span><span class="typ">For</span><span class="pln"> </span><span class="typ">Each</span><span class="pln"> item </span><span class="typ">As</span><span class="pln"> </span><span class="typ">XElement</span><span class="pln"> </span><span class="typ">In</span><span class="pln"> result
</span><span class="typ">Console</span><span class="pun">.</span><span class="typ">WriteLine</span><span class="pun">(</span><span class="str">"Department Name - "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> item</span><span class="pun">.</span><span class="typ">Value</span><span class="pun">)</span><span class="pln">
</span><span class="typ">Next</span><span class="pln">
</span><span class="typ">Console</span><span class="pun">.</span><span class="typ">WriteLine</span><span class="pun">(</span><span class="pln">vbLf </span><span class="pun">&</span><span class="pln"> </span><span class="str">"Press any key to continue."</span><span class="pun">)</span><span class="pln">
</span><span class="typ">Console</span><span class="pun">.</span><span class="typ">ReadKey</span><span class="pun">()</span><span class="pln">
End Sub
End Module
编译并执行以上C#或VB的代码时,将产生以下输出-
Department Name - Support Department Name - Account Department Name - Pre-Sales Department Name - Marketing Department Name - FinancePress any key to continue.