使用 LINQ to XML

LINQ to XML 的目标是提供 XML 对象模型,能够很好地以LINQ 的函数风格进行编程。表 9-4 汇总了这个命名空间中的重要类。

表 9-4 由 LINQ to XML 提供的类


类名


父类


描述


XNode


这个类提供了应用于 XML 文档中的所有结点的基础功能。


XContainer


XNode


这个类提供了 XML 结点的功能,可以包含其他结点。


XDocument


XContainer


这个类把 XML 文档作为一个整体表示。


XElement


XContainer


这个类表示 XML 文档中元素,即,表示通常的 XML 结点可以是标记,<myTag  />,或包含其他标记或属性,如,myAttribute="myVal"。


XDocumentType


XNode


这个类表示文档类型标记。


XProcessInstruction


XNode


这个类表示处理指令,标记形式为 <? name instruction ?>。


XText


XNode


这个类表示包含在 XML 文档中的文本。


XName


这个类表示标记或属性的名字。

可以看到实际使用的这个对象模型,通过修改前一节的例子,把输出的纯文本改成 XML,用LINQ to XML 很容易就能完成。首先,修改 select 子句,使返回的元组成为 XEement:

|> select (fun m -> newXElement(XName.Get(m.Key), count m))

这就得到一个 XEements 数组,然后用它来初始化另一个 XEement,它提供文档的根;这时,调用根 XElement 的 ToString 方法,它将以字符串的形式提供 XML:

open System

open System.Linq

open System.Reflection

open System.Xml.Linq

//define easier access to LINQ methods

let select f s =
Enumerable.Select(s, new
Func<_,_>(f))

let where f s =
Enumerable.Where(s, new
Func<_,_>(f))

let groupBy f s =
Enumerable.GroupBy(s, new
Func<_,_>(f))

let orderBy f s =
Enumerable.OrderBy(s, new
Func<_,_>(f))

let count s =
Enumerable.Count(s)

//query string methods using functions

let namesByFunction =

(typeof<string>).GetMethods()

|> where (fun m
-> not m.IsStatic)

|> groupBy (fun m
-> m.Name)

|> select (fun m
-> newXElement(XName.Get(m.Key), count m))

|> orderBy (fun e
-> int e.Value)

//create an xml document with the overloads data

let overloadsXml =

new XElement(XName.Get("MethodOverloads"), namesByFunction)

//print the xml string

printfn"%s"(overloadsXml.ToString())

[

需要引用 System.Xml 和 System.Xml.Linq

]

运行结果如下:

<MethodOverloads>

<get_Chars>1</get_Chars>

<CopyTo>1</CopyTo>

<GetHashCode>1</GetHashCode>

<get_Length>1</get_Length>

<TrimStart>1</TrimStart>

<TrimEnd>1</TrimEnd>

<Contains>1</Contains>

<ToLowerInvariant>1</ToLowerInvariant>

<ToUpperInvariant>1</ToUpperInvariant>

<Clone>1</Clone>

<Insert>1</Insert>

<GetTypeCode>1</GetTypeCode>

<GetEnumerator>1</GetEnumerator>

<GetType>1</GetType>

<ToCharArray>2</ToCharArray>

<Substring>2</Substring>

<Trim>2</Trim>

<IsNormalized>2</IsNormalized>

<Normalize>2</Normalize>

<CompareTo>2</CompareTo>

<PadLeft>2</PadLeft>

<PadRight>2</PadRight>

<ToLower>2</ToLower>

<ToUpper>2</ToUpper>

<ToString>2</ToString>

<Replace>2</Replace>

<Remove>2</Remove>

<Equals>3</Equals>

<EndsWith>3</EndsWith>

<IndexOfAny>3</IndexOfAny>

<LastIndexOfAny>3</LastIndexOfAny>

<StartsWith>3</StartsWith>

<Split>6</Split>

<IndexOf>9</IndexOf>

<LastIndexOf>9</LastIndexOf>

</MethodOverloads>

第九章小结

这一章我们已经学习了在 F# 中访问数据,可以看出 F# 与 .NET 库的组合,功能强大又很简单,不管是何种数据源。下一章我们将学习如何使应用程序并行化的新课题。

使用 LINQ to XML

时间: 2025-01-01 06:36:48

使用 LINQ to XML的相关文章

24.C#LINQ TO XML(十二章12.3)

自己也写了那么多,但还有很多不懂,有点浮躁吧,但饭还是要吃啊,说说LINQ TO XML吧. LINQ TO XML位于System.Xml.Linq程序集,并且大多数类型位于System.Xml.Linq命名空间.该命名空间下几乎所有类型都以X为前缀;普通DOM API中的Element对应LINQ TO XML中的XElement.列举下都有哪些类型. XName:表示元素和特性的名称 XNamespace:表示XML的命名空间,通常是一个URL XObject:是XNode和XAttrib

LINQ to XML 编程基础

1.LINQ to XML类 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: 隐藏行号 复制代码 ?创建 XML public static void CreateDocument() { string path = @"d:\website"; XDocument xdoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"), new XEle

XML读写利器XElement(Linq to xml)

年初公司绩效改革,在等最后通知,不知我有没理解错,感觉新版绩效最高会比原先最高拿到的奖金整整少一半... 还好同时也有调工资,加了一点.去年好像是年中整体调过一次,不知公司是一年调两次还是从今年开始改成年初调. 晚上去加班,处理一个数据交换,本想XML和实体直接互相转换,但XML结构太复杂,自动转换不理想,改用手工处理. 原先其它项目是用原始的XmlDocument,感觉不好用,写法也很不美观 网上说还有种XMLTextReader,像DataReader一样,向前只读的,从来没用过 以前有用过

Linq之Linq to XML

目录 写在前面 系列文章 linq to xml 总结 写在前面 在很多情况下,都可以见到使用xml的影子.例如,在 Web 上,在配置文件.Microsoft Office Word 文件(将word文档另存为xml文件,这也提供了一种通过操作xml,操作word的一种方式)以及数据库中,都可以看到 XML.而linq to xml提供了一种操作xml更便捷的方式. 系列文章 Linq之Lambda表达式初步认识 Linq之Lambda进阶 Linq之隐式类型.自动属性.初始化器.匿名类 Li

LINQ to XML(1)

LINQ to XML可以两种方式和XML配合使用.第一种方式是作为简化的XML操作API,第二种方式是使用LINQ查询工具.下面我使用的是第二种方式. 主要内容:用LINQ查询语句对XML文件里的数据进行筛选. 此方法优点: 1.我们可以使用单一语句自顶向下创建XML树. 2.我们可以使用包含树的XML文档在内存中创建并操作XML. 3.我们可以不适用Text子节点来创建和操作字符串节点. 4.一个最大的不同(改进)是,在搜索一个XML树时,不需要遍历它.相反只需要查询树并让它返回想要的结果.

LINQ to XML 实战

LINQ to XML 轴定义:创建XML树或将XML文档加载到XML树之后,可以进行查询,从而查找元素并检索它们的值. 两类轴方法:-一些轴就是XELement和XDocument类中返回IEnumerable(T)集合的方法.-另一些轴方法是Extensions类中的扩展方法.实现为扩展方法的轴对集合进行操作,然后返回集合.XContainer是XElement的基类! -常见的轴方法:-XContainer.Elements()返回集合 -XContainer.Descendants()返

Linq To XML 简单操作

加载xml文件和保存xml文件 XDocument doc = XDocument.Load(Server.MapPath("\\xmlfile\\Book.xml")); doc.Save(Server.MapPath("\\xmlfile\\BookBackup.xml")); 创建元素 XElement xe = new XElement("book",new XElement("bookname","asp.

Linq学习随笔二------LINQ to XML

LINQ to XML LINQ to XML provides an in-memory XML programming interface that leverages the .NET Language-Integrated Query (LINQ) Framework. LINQ to XML uses the latest .NET Framework language capabilities and is comparable to an updated, redesigned D

LINQ to XML编程之编程基础

1.声明,LINQ to XML让xml的创建变得非常简单. 1 XDocument myDocument = new XDocument( 2 new XDeclaration("1.0", "utf-8", "yes"), 3 new XElement("Root", "stuff") 4 ); 5 string str = myDocument.Declaration + Environment.Ne

Silverlight 使用IsolatedStorage新建XML文件,并且用LINQ查询XML

代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->using System; using System.Linq; using System.Windows.Shapes; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO