LINQ to XML 使用筆記 - 查詢 XML 資料

2018-02-03 10:18:37来源:http://poychang.github.io/linq-to-xml-query-xml/作者:Poy Chang人点击

分享

接续上篇的基本操作,这篇主要使用 LINQ to XML 来查询 XML 档案内的资料。


目录:


基本操作
建立 XML 档案
查询 XML 资料
修改 XML 资料
转换 XML 资料
验证 XML 资料
取得 CDATA 资料


系列文完整範例程式码请参考poychang/Demo-Linq-To-Xml


查询 XML 资料

要使用 LINQ to XML 来查询 XML 资料前,先记得一个概念,LINQ 可以对资料集合进行查询,这个资料集合可以想像成一个 Array 或一串 List,我们只要能建立将这个资料集合,把他当作 LINQ 的资料来源即可。


而 LINQ to XML 里面有三个作为资料集合的方法:


Elements()
Descendants()
DescendantNodes()
Elements()


Elements()
可以从一个指定节点中,取得底下的所有子元素,作为资料集合。也可以设定想要过滤的元素名称,只抓符合该名称的元素,例如XDocument.Load(filePath).Elements("Students").Elements("Student")
代表从 XML 文件中找到Students
节点底下,名称符合Student
的元素,一笔笔的读出来作为资料集合。


Descendants()


Descendants()
跟Elements()
很像,从一个指定节点中,取得底下的所有子元素,但这里的子元素的收集,是会将 XML 做递迴拆解,一层一层将资料拆解出来,并存成可列举的资料型态。



这方法所组成的资料集合比较不容易解释,建议使用下面程式码,修改filePath
档案路径后,执行看看所产生出的资料会有那些东西,有看到实际产生的资料,会比较有感觉。


foreach (var elememt in XDocument.Load(filePath).Descendants())
{
Console.WriteLine(elememt);
Console.WriteLine("----------");
}


Descendant 这个英文单字是后代
的意思,泛指从某一来源派生(或传下)的东西。



Descendants()
同样的也可以设定想要过滤的元素名称,例如XDocument.Load(filePath).Descendants("Student")


DescendantNodes()


DescendantNodes()
跟Descendants()
很像,但限缩资料集合只有节点,而没有元素。


以这个 XML 作为範例说明:


<Students>
<Student Id="101">
<Name>Mark</Name>
<Gender>Male</Gender>
<TotalMarks>800</TotalMarks>
</Student>
<Student Id="103">
<Name>John</Name>
<Gender>Male</Gender>
<TotalMarks>950</TotalMarks>
</Student>
</Students>


<Student>
是一个 XML 节点也是 XML 元素,而<Name>
是一个 XML 元素。



因此DescendantNodes()
会将指定节点底下的所有节点作为资料集合,例如XDocument.Load(filePath).DescendantNodes()
会收集到两笔Student
节点。



请注意DescendantNodes()
无法设定过滤的名称(毕竟他的目标是节点,不是元素)。



除了 DescendantNodes(),请参考03-QueryXmlDocument
专案的Program.cs


参考资料:


最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台