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和XAttribute的共同父类:与DOM API中不同,在LINQ TO XML中特性不是节点。如果某方法返回子节点的元素,这里面是不包含特性的
- XNode:表示XML树中的节点,它定义了各种用于操作和查询树的成员。
- XAttribute:表示包含名/值对的特性,值从本质上讲是文本,但可以显式地转换成其它数据类型
- XContainer:是XML树中包含子内容的节点
- XText:表示文本节点,其派生类XCData是CDATA文本节点
- XElement:它和XAttribute是LINQ TO XML中最常用的类,
- XDocument:表示文档
- 继承于XContainer的Add方法有以下几点:
- 空引用会被忽略
- XNode和XAttribute实例可以添加
- 字符串、数字、日期、时间等使用标准XML格式转换成XText
- 其它没有特殊处理的对象将调用ToString()将其转换成文本
- 使用的几个实例
var element = new XElement("root", new XElement("child"));
Console.WriteLine(element);<root>
<child />
</root>var element1 = new XElement("root", new XElement("child", DateTime.Now));
Console.WriteLine(element1);<root>
<child>2015-01-28T22:35:41.9713268+08:00</child>
</root>var list = new List<User> {
new User {Name="a",Age= },
new User {Name="b",Age= },
new User {Name="c",Age= },
new User {Name="d",Age= }
}; var element2 = new XElement("root", list.Select(user => new XElement("child", user.Name)));
Console.WriteLine(element2);var element3 = new XElement("root", list.Select(user => new XElement("child", new XAttribute("name", user.Name), new XAttribute("age", user.Age))));
Console.WriteLine(element3);<root>
<child>a</child>
<child>b</child>
<child>c</child>
<child>d</child>
</root> <root>
<child name="a" age="1" />
<child name="b" age="2" />
<child name="c" age="3" />
<child name="d" age="4" />
</root> - 查询单个节点
对于XElement来说可迭代的东西太多了,XElement包含很多轴方法(轴方法,个人理解就是直接了当的方法),如什么什么点,比如New Element("root").Elements就是返回在root下所有的子节点,New Element("root").Attributes就是root中所有特性节点。还是罗列下吧,但不止这些。
- Ancestors:祖先节点
- DescendantNodes:后代节点
- Annotations:注释(注释也是一个节点)
- Elements:子节点
- Descendants:后代
- 节点。。。。
对单个节点使用的轴方法返回的节点序列,完全可以使用LINQ来查询,或者使用扩展方法来做一些操作,可以看到LINQ从查询内存中object到数据库中的数据,再到XML,使用的都是相同的方法(对于我们使用者),完美地结合起来。
请斧正。
24.C#LINQ TO XML(十二章12.3)的更多相关文章
- 23.C#Queryable的扩展方法(十二章12.1-12.2)
今天要写的知识还真心有点绕呢,对于第一节的内容,其实是把原先在内存中的数据源,换成了从数据库中提取出来的数据.从代码的使用方式上是一样的,直接跳过,来看看IEnumerable和IQueryable的 ...
- PRML读书会第十二章 Continuous Latent Variables(PCA,Principal Component Analysis,PPCA,核PCA,Autoencoder,非线性流形)
主讲人 戴玮 (新浪微博: @戴玮_CASIA) Wilbur_中博(1954123) 20:00:49 我今天讲PRML的第十二章,连续隐变量.既然有连续隐变量,一定也有离散隐变量,那么离散隐变量是 ...
- 《Android群英传》读书笔记 (5) 第十一章 搭建云端服务器 + 第十二章 Android 5.X新特性详解 + 第十三章 Android实例提高
第十一章 搭建云端服务器 该章主要介绍了移动后端服务的概念以及Bmob的使用,比较简单,所以略过不总结. 第十三章 Android实例提高 该章主要介绍了拼图游戏和2048的小项目实例,主要是代码,所 ...
- perl5 第十二章 Perl5中的引用/指针
第十二章 Perl5中的引用/指针 by flamephoenix 一.引用简介二.使用引用三.使用反斜线(\)操作符四.引用和数组五.多维数组六.子程序的引用 子程序模板七.数组与子程序八.文件句 ...
- 《Django By Example》第十二章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第十二章,全书最后一章,终于到这章 ...
- Gradle 1.12用户指南翻译——第五十二章. Maven 插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见:http://blog.csdn.net/column/details/gradle-translation.html翻译项目请关注Github上 ...
- Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验
Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高 ...
- 《Django By Example》第十二章(终章) 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第十二章,全书最后一章,终于到这章 ...
- o'Reill的SVG精髓(第二版)学习笔记——第十二章
第十二章 SVG动画 12.1动画基础 SVG的动画特性基于万维网联盟的“同步多媒体集成语言”(SMIL)规范(http://www.w3.org/TR/SMIL3). 在这个动画系统中,我们可以指定 ...
随机推荐
- nyoj 667 碟战 最小割(最大流)
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=677 题意转化:将点0与所有的有间谍的点相连,则题意变为求点0到点n的最小割,直接套最大流 ...
- BI Project Managerment
Design doc is the meta data of the code. The project management plan is crucial to your project sinc ...
- runv containerd 流程分析
当runv需要启动一个容器的时候,首先需要启动containrd,作为该容器的daemon.因此,启动containerd的相关代码也是从runv/start.go开始.最终,启动containerd ...
- LeetCode题解-----Maximum Gap
题目描述: Given an unsorted array, find the maximum difference between the successive elements in its so ...
- 迭代加深搜索 POJ 1129 Channel Allocation
POJ 1129 Channel Allocation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14191 Acc ...
- python中range函数和xrange函数有什么异同?
http://ciniao.me/article.php?id=17 简单来说,range生成的是一个列表,而xrange生成的是一个生成器,而生成器在数组很大的时候能够比range更节省空间
- UESTC 1227 & POJ 3667 Hotel
非常细腻的线段树题目啊,后来还是有个细节写错了,查了一个晚上..就不分析了. 代码: #include <iostream> #include <cstdio> #includ ...
- 2016"百度之星"-资格赛
//本题要求:(Ar*A2...An)%p,亦即[(A1*A2*...An)/(A1*A2*...Ar-1)]%p,由于A1*A2...An乘积过大,无法求得相除所得的结果 //我们需要用到乘法逆元( ...
- FreeMarker 一二事 - 静态模板结合spring展示
freemarker可以脱离web使用 前一篇文章使用了普通的方法 这回说说结合spring pom额外引入这个jar包 <dependency> <groupId>org.s ...
- 看ImplicitBackwardEulerSparse关于static solve的代码
当选择static solve的时候,求解的流程如下: 1.获得内力 2.qresidual = 外力-内力,qdelta = qresidual, qdelta的非约束元素赋给bufferConst ...