LINQ To XML : Descendants函式
2008-04-17 08:56
351 查看
LINQ To XML : Descendants函式
在LINQ To XML 的架構中,若想取得某個Element下的指定之子Element,可以呼叫Descendants這個Extension Method,如下所示:
此例所使用的XML如下:
不過,這有個特別的情況,當XML中包含了Namespace時,傳入Descendants的指定Element名稱就必須包含Namespace,舉個例來說,下面的.dbml(LINQ To SQL的定義檔)。
如果用下面的程式來列舉Connection Element,會以失敗收場。
問題的徵結點在於.dbml中定義了Namespace,而我們於呼叫Descendants時,只傳入Element的LocalName部份所致,仔細查看Descendants函式的宣告,你會發現其事實上接收的是一個XName型別的物件,由於XName實作了隱含轉型運算子,所以很自然的將我們傳入的字串隱含轉型為XName,只是此時得到的XName物件中只包含了LocalName部份,並未包含Namespace部份。
要順利取得Connection Element,我們可以用下面的程式碼來達成。
此例中我們以未帶參數的Descendants函式來取得所有子Element,並一一比對其LocalName,忽略掉Namespace。
另一個手法是直接以Root Element的Namespace來疊加LocalName,如下所示:
此手法的缺點是,欲取得的Element之Namespace必須與Root Element相同。
在LINQ To XML 的架構中,若想取得某個Element下的指定之子Element,可以呼叫Descendants這個Extension Method,如下所示:
foreach (XElement elem in doc.Elements("Customers").Descendants("Customer")) Console.WriteLine(string.Format("Customer ID : {0}, Name : {1}, Address : {2}", elem.Attribute("ID").Value, elem.Attribute("Name").Value, elem.Attribute("Address").Value)); |
<?xml version="1.0" encoding="utf-8"?> <Customers> <Customer ID="A0001" Name="Tom" Address="Taipen" /> <Customer ID="A0002" Name="Mary" Address="LD" /> <Customer ID="A0003" Name="Jeff" Address="YW" /> </Customers> |
<?xmlversion="1.0"encoding="utf-8"?> <DatabaseName="Northwind"Class="DataClasses1DataContext" xmlns="http://schemas.microsoft.com/linqtosql/dbml/2007"> <ConnectionMode="AppSettings"ConnectionString= "Data Source=JEFFRAY;Initial Catalog=Northwind;Integrated Security=True"SettingsObjectName="LTSync.Properties.Settings"SettingsPropertyName="NorthwindConnectionString"Provider="System.Data.SqlClient" /> ........... </Database> |
var cstr = (from s1 in doc.Descendants("Connection") select s1).First(); |
要順利取得Connection Element,我們可以用下面的程式碼來達成。
var cstr = (from s1 in doc.Descendants() where s1.Name.LocalName == "Connection" select s1).First(); |
另一個手法是直接以Root Element的Namespace來疊加LocalName,如下所示:
var cstr = (from s1 in doc.Descendants(doc.Root.Name.Namespace+"Connection") select s1).First(); |
相关文章推荐
- LINQ to XML操作Xml文档
- [代码]使用XSD验证XML示例1(LINQ to XML)
- 步步为营VS 2008 + .NET 3.5(14) - XLINQ(LINQ to XML)之针对XML文件的添加、查询、更新和删除
- LINQ TO XML(创建XML文档)
- linq to xml(删除)
- Linq To Xml 备忘录3(使用Namespace的查询)
- 使用Dom与Linq to Xml
- linq to xml操作XML
- LINQ To XML 入门(3)
- Linq To Xml上手(1) Descendants、Elements遍历节点
- 使用Python读取TestTrack记录- Part3 动态生成Linq to xml查询语句筛选条件
- LINQ to XML 简单的小例子
- linq to xml查询绑定GridView
- Linq To Xml 创建修改xml文档
- C# 中的默认命名空间的范围 (LINQ to XML)
- C#基础精华06(Linq To XML,读取xml文件,写入xml)
- C#新手入门代码 LINQ TO XML xattribute的用法示例
- Converting Linq result to XML String
- An Extensive Examination of LINQ: Querying and Searching XML Documents Using LINQ to XML