Csharp/C#教程:C# LINQ to XML应用介绍分享

上述就是C#学习教程:C# LINQ to XML应用介绍分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)! W3C制定了XMLDOM标准,.Net为了支持W3C的标准,从1.1版本开始就引入了XmlDocument类。我在前一篇博客中,介绍了如何使用XmlDocument类来对XML文档进行操作。后来.Net又引入了LINQ,于是LINQtoXML也就应运而生,所以在.Net中,不仅可以用W3CXMLDOM标准,还可以使用LINQtoXML来操作XML文档。下面就来简单介绍一下如何使用LINQtoXML。
(一)加载
加载XML比较常用的有三种方法:
代码如下:
publicstaticXDocumentLoad(stringuri);
publicstaticXDocumentLoad(Streamstream);
publicstaticXDocumentParse(stringtext);

下面代码演示如何使用它们:
代码如下:
//publicstaticXDocumentLoad(stringuri);
//uri即为要装载的文件名
vardoc1=XDocument.Load(“XMLFile1.xml”);
//publicstaticXDocumentLoad(Streamstream);
EntityretrievedAnnotation=_orgService.Retrieve(“annotation”
,newGuid(“C1B13C7F-F430-E211-8FA1-984BE1731399”),newColumnSet(true));
byte[]fileContent=Convert.FromBase64String(retrievedAnnotation[“documentbody”].ToString());
MemoryStreamms=newMemoryStream(fileContent);
XDocumentxDoc=XDocument.Load(ms);
//publicstaticXDocumentParse(stringtext);
stringstr=@”<Customers><Customerid=’01’city=’Beijing’country=’China’name=’Lenovo’/></Customers>”;
vardoc2=XDocument.Parse(str);

(二)查询
我们以下面的XML文档为例:
代码如下:
<?xmlversion=”1.0″encoding=”utf-8″?>
<Customers>
<Customerid=”01″city=”Beijing”country=”China”>Lenovo
<OrderOrderID=”1001″Freight=”36.00″/>
<OrderOrderID=”1003″Freight=”61.50″/>
</Customer>
<Customerid=”02″city=”Amsterdam”country=”TheNetherlands”>Shell
<OrderOrderID=”1002″Freight=”56.65″/>
<OrderOrderID=”1004″Freight=”65.50″/>
<OrderOrderID=”1005″Freight=”100.50″/>
</Customer>
</Customers>

1.返回所有Customer节点:
代码如下:
varresult=fromcustomerindoc1.Descendants(“Customer”)
selectcustomer.Value;
foreach(varsinresult)
{
Console.WriteLine(s);
}

输出结果:
Lenovo
Shell
2.返回id为02并且city为Amsterdam的customer:
代码如下:
varresult=(fromcustomerindoc1.Descendants(“Customer”)
where(string)customer.Attribute(“id”)==”02″&&(string)customer.Attribute(“city”)==”Amsterdam”
selectcustomer.Value).FirstOrDefault();
Console.WriteLine(result);

输出结果:
Shell
3.查找出orderID1003的customerID和它的freight:
代码如下:
varresult=(fromorderindoc1.Descendants(“Order”)
whereorder.Attribute(“OrderID”).Value==”1003″
selectnew
{
CustomerID=order.Parent.Attribute(“id”).Value,
Freight=(decimal)order.Attribute(“Freight”)
}).FirstOrDefault();
Console.WriteLine(string.Format(“CustomerID:{0}Freight:{1}”,result.CustomerID,result.Freight));

输出结果:
CustomerID:01Freight:61.50
4.查询每个客户的freight的总和
代码如下:
varresult=fromcustomerindoc1.Descendants(“Customer”)
selectnew
{
CustomerName=customer.Value,
TotalFreight=customer.Descendants(“Order”).Sum(o=>(decimal)o.Attribute(“Freight”))
};
foreach(varrinresult)
{
Console.WriteLine(string.Format(“Customer:{0}TotalFreight:{1}”,r.CustomerName,r.TotalFreight));
}

输出结果:
Customer:LenovoTotalFreight:97.50
Customer:ShellTotalFreight:222.65
5.使用LINQtoXMLJoin
Join可以用在LINQtoXML和其他的LINQproviders,比如说LINQtoObjects。下面的代码展示了如何将一个数组和一个XML文件Join起来。
代码如下:
string[]orders={“1001″,”2000″,”1002”};
varresult=fromorderindoc1.Descendants(“Order”)
joinselectedinorders
on(string)order.Attribute(“OrderID”)equalsselected
selectnew
{
CustomerName=order.Parent.Value,
OrderID=selected,
Freight=(decimal)(order.Attribute(“Freight”))
};
foreach( varrinresult)
{
Console.WriteLine(string.Format(“CustomerID:{0}Order:{1}Freight:{2}”,r.CustomerName,r.OrderID,r.Freight));
}

输出结果:
CustomerID:LenovoOrder:1001Freight:36,00
CustomerID:ShellOrder:1002Freight:56,65
(三)创建
以创建以下XML文档为例:
代码如下:
<?xmlversion=”1.0″encoding=”utf-8″?>
<Customers>
<Customerid=”01″city=”Beijing”country=”China”name=”Lenovo”>
<OrderOrderID=”1001″Freight=”36.00″/>
</Customer>
</Customers>

代码如下:
vardoc=newXDocument(
newXElement(“Customers”,
newXElement(“Customer”,
newXAttribute(“id”,”01″),
newXAttribute(“city”,”Beijing”),
newXAttribute(“country”,”China”),
newXAttribute(“name”,”Lenovo”),
newXElement(“Order”,
newXAttribute(“OrderID”,”1001″),
newXAttribute(“Freight”,”36.00″)
)
)
)
);
doc.Save(“test.xml”);

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/904350.html

(0)
上一篇 2021年10月21日
下一篇 2021年10月21日

精彩推荐