使用 LINQ to XML

使用 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,_>(f))

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

let orderBy f s = Enumerable.OrderBy(s,_>(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 库的组合,功能强大又很简单,不管是何种数据源。下一章我们将学习如何使应用程序并行化的新课题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇