使用 LINQ to XML
使用 LINQ to XML LINQ to XML 的目标是提供 XML 对象模型,能够很好地以LINQ 的函数风格进行编程。表 9-4 汇总了这个命名空间中的重要类。 表 9-4 由 LINQ to XML 提供的类
可以看到实际使用的这个对象模型,通过修改前一节的例子,把输出的纯文本改成 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 库的组合,功能强大又很简单,不管是何种数据源。下一章我们将学习如何使应用程序并行化的新课题。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |