国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C# LINQ to XML應用介紹

2020-01-24 03:39:08
字體:
來源:轉載
供稿:網友
W3C制定了XML DOM標準,.Net為了支持W3C的標準,從1.1版本開始就引入了XmlDocument類。我在前一篇博客中,介紹了如何使用XmlDocument類來對XML文檔進行操作。后來 .Net又引入了LINQ,于是LINQ to XML也就應運而生,所以在.Net中,不僅可以用W3C XML DOM標準,還可以使用LINQ to XML來操作XML文檔。下面就來簡單介紹一下如何使用LINQ to XML。
(一) 加載
加載XML比較常用的有三種方法:
復制代碼 代碼如下:

public static XDocument Load(string uri);
public static XDocument Load(Stream stream);
public static XDocument Parse(string text);

下面代碼演示如何使用它們:
復制代碼 代碼如下:

// public static XDocument Load(string uri);
// uri 即為要裝載的文件名
var doc1 = XDocument.Load("XMLFile1.xml");
// public static XDocument Load(Stream stream);
Entity retrievedAnnotation = _orgService.Retrieve("annotation"
, new Guid("C1B13C7F-F430-E211-8FA1-984BE1731399"), new ColumnSet(true));
byte[] fileContent = Convert.FromBase64String(retrievedAnnotation["documentbody"].ToString());
MemoryStream ms = new MemoryStream(fileContent);
XDocument xDoc = XDocument.Load(ms);
// public static XDocument Parse(string text);
string str = @"<Customers><Customer id='01' city='Beijing' country='China' name='Lenovo'/></Customers>";
var doc2 = XDocument.Parse(str);

(二) 查詢
我們以下面的XML文檔為例:
復制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8" ?>
<Customers>
<Customer id="01" city="Beijing" country="China">Lenovo
<Order OrderID="1001" Freight="36.00" />
<Order OrderID="1003" Freight="61.50" />
</Customer>
<Customer id="02" city="Amsterdam" country="The Netherlands">Shell
<Order OrderID="1002" Freight="56.65" />
<Order OrderID="1004" Freight="65.50" />
<Order OrderID="1005" Freight="100.50" />
</Customer>
</Customers>

1. 返回所有Customer 節點:
復制代碼 代碼如下:

var result = from customer in doc1.Descendants("Customer")
select customer.Value;
foreach (var s in result)
{
Console.WriteLine(s);
}

輸出結果:
Lenovo
Shell
2. 返回id為02并且 city 為 Amsterdam 的customer :
復制代碼 代碼如下:

var result = (from customer in doc1.Descendants("Customer")
where (string)customer.Attribute("id") == "02" && (string)customer.Attribute("city") == "Amsterdam"
select customer.Value).FirstOrDefault();
Console.WriteLine(result);

輸出結果:
Shell
3. 查找出 order ID 1003的customer ID和它的freight:
復制代碼 代碼如下:

var result = (from order in doc1.Descendants("Order")
where order.Attribute("OrderID").Value == "1003"
select new
{
CustomerID = order.Parent.Attribute("id").Value,
Freight = (decimal)order.Attribute("Freight")
}).FirstOrDefault();
Console.WriteLine(string.Format("Customer ID: {0} Freight: {1}", result.CustomerID, result.Freight));

輸出結果:
Customer ID: 01 Freight: 61.50
4. 查詢每個客戶的freight的總和
復制代碼 代碼如下:

var result = from customer in doc1.Descendants("Customer")
select new
{
CustomerName = customer.Value,
TotalFreight = customer.Descendants("Order").Sum(o => (decimal)o.Attribute("Freight"))
};
foreach (var r in result)
{
Console.WriteLine(string.Format("Customer: {0} Total Freight: {1}", r.CustomerName, r.TotalFreight));
}

輸出結果:
Customer: Lenovo Total Freight: 97.50
Customer: Shell Total Freight: 222.65
5. 使用LINQ to XML Join
Join可以用在LINQ to XML和其他的LINQ providers,比如說LINQ to Objects。下面的代碼展示了如何將一個數組和一個XML文件Join起來。
復制代碼 代碼如下:

string[] orders = {"1001", "2000", "1002"};
var result = from order in doc1.Descendants("Order")
join selected in orders
on (string)order.Attribute("OrderID") equals selected
select new
{
CustomerName = order.Parent.Value,
OrderID = selected,
Freight = (decimal)(order.Attribute("Freight"))
};
foreach (var r in result)
{
Console.WriteLine(string.Format("Customer ID: {0} Order:{1} Freight: {2}", r.CustomerName, r.OrderID, r.Freight));
}

輸出結果:
Customer ID: Lenovo Order:1001 Freight: 36,00
Customer ID: Shell Order:1002 Freight: 56,65
(三) 創建
以創建以下XML文檔為例:
復制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<Customers>
<Customer id="01" city="Beijing" country="China" name="Lenovo">
<Order OrderID="1001" Freight="36.00" />
</Customer>
</Customers>

復制代碼 代碼如下:

var doc = new XDocument(
new XElement("Customers",
new XElement("Customer",
new XAttribute("id", "01"),
new XAttribute("city", "Beijing"),
new XAttribute("country", "China"),
new XAttribute("name", "Lenovo"),
new XElement("Order",
new XAttribute("OrderID", "1001"),
new XAttribute("Freight", "36.00")
)
)
)
);
doc.Save("test.xml");

總結:
1. XDocument提供了對XML文檔在內存中的隨機的讀寫操作。
2. XDocument使用LINQ to XML來讀取XML結點。
3. 你可以通過LINQ投射(projection)來將XML變換為Object。
4. LINQ投射可以將XML變換為IEnumerable<String>。
5. LINQ投射可以將XML變換為其他格式的XML。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 齐齐哈尔市| 凤山县| 凌云县| 板桥市| 太湖县| 南开区| 彭州市| 屯昌县| 赣州市| 建水县| 阿克陶县| 昆山市| 朝阳市| 新竹县| 凤凰县| 郓城县| 庆城县| 通城县| 慈溪市| 清远市| 镇巴县| 荣成市| 海伦市| 怀宁县| 新疆| 睢宁县| 行唐县| 夹江县| 江川县| 伊通| 察哈| 林周县| 华容县| 邵阳县| 汤原县| 华池县| 河北省| 河北省| 三都| 甘肃省| 东乌珠穆沁旗|