linq to xml复习

虽然linq to xml随着.net framework3.0一起发布N久了,但因为自己以前参考网上的代码封装了一个xml操作类(当时linq to xml还没出来,这个封闭工具类一直也用得很顺手),所以在项目中也几乎极少用linq to xml,最近业余时间学习silverlight,原来针对winform/webform开发写的一些工具库部分要作修改才能用于silverlight,懒得一一移植了,干脆直接用.net内置的得了,何况自己再写一个,也还是这些玩意儿,有现成的不用白不用,整理了一些demo代码,贴在这里日后备用

1.简单创建xml

 1 XElement xml  =   new  XElement( " Data " , // 创建Data根节点
 2                      new  XElement( " item " , // 创建Data下的子节点item
 3                          new  XAttribute( " src " " http://www.baidu.com/logo.gif " ), // 创建属性
 4                          new  XAttribute( " url " " http://www.baidu.com/ " )
 5                         ),
 6                      new  XElement( " item " ,
 7                          new  XAttribute( " src " " http://www.yahoo.com.cn/logo.gif " ),
 8                          new  XAttribute( " url " " http://www.yahoo.com.cn/ " ),
 9                          new  XComment( " item's comment " ), // 注释
10                          new  XText( " items's text " ), // 节点文本
11                          new  XCData( " <b>CData Test!</b> " ) // CData文本
12                         ),
13                      new  XElement( " item " ,
14                          new  XElement( " sub " ,
15                                new  XAttribute( " type " " string " )
16                               ),
17                          new  XElement( " id " ,
18                                new  XText( " 10001 " )
19                               )
20                     )
21                );
22              // xml.Save(Server.MapPath("demo.xml")); // 保存为文件

以上代码将创建以下内容的xml,基本上xml的各种元素都用到了

 1 <? xml version="1.0" encoding="utf-8" ?>
 2 < Data >
 3    < item  src ="http://www.baidu.com/logo.gif"  url ="http://www.baidu.com/"   />
 4    < item  src ="http://www.yahoo.com.cn/logo.gif"  url ="http://www.yahoo.com.cn/" >
 5      <!-- item's comment --> items's text <![CDATA[ <b>CData Test!</b> ]]> </ item >
 6    < item >
 7      < sub  type ="string"   />
 8      < id > 10001 </ id >
 9    </ item >
10 </ Data >

 

2.查询xml

 1 XElement root  =  XElement.Load(Server.MapPath( " demo.xml " ));
 2
 3 // 找出item元素中有属性src的节点
 4 // IEnumerable<XElement> query = from c in root.Elements("item")
 5 //                               where c.Attributes("src").Count() > 0
 6 //                               select c;            
 7
 8 ////当然也可以写成lambda表达式
 9 // var query = root.Elements("item").Where(c => c.Attributes("src").Count() > 0);
10
11 // 如果您熟悉xpath语法,可以写得更精简,这也是我最喜欢的方式
12 var query  =  root.XPathSelectElements( " item[@src] " );
13
14 foreach  (var item  in  query)
15 {
16    Response.Write(HttpUtility.HtmlEncode(item.ToString()) + "<br/>");
17}

18
19
20
21 // 找出item元素中的有属性src,且包含baidu的节点
22 // var query = from c in root.Elements("item")
23 //             where c.Attributes("src").Count() > 0 && ((string)c.Attribute("src")).Contains("baidu")
24 //             select c;                            
25     
26 ////等同于以下的lambda写法
27 // var query = root.Elements("item").Where(c => c.Attributes("src").Count() > 0 && ((string)c.Attribute("src")).Contains("baidu"));
28
29 ////用xpath语法更省事
30 // var query = root.XPathSelectElements("item[@src][contains(@src,'baidu')]");

 注:如果使用XPath语法,先要using System.Xml.XPath;

3.带循环的"复杂"创建节点

 1 XElement root  =   new  XElement( " data " );
 2
 3 var _arr  =   " y j m y z z @ 1 2 6 . c o m " .Split( '   ' );
 4
 5 foreach  ( string  c  in  _arr)
 6 {
 7    XElement item = new XElement("item",
 8                new XAttribute("value", c)
 9            );
10
11    root.Add(item);
12}

root内容如下:

 1
 2 < data >
 3    < item  value ="y"   />
 4    < item  value ="j"   />
 5    < item  value ="m"   />
 6    < item  value ="y"   />
 7    < item  value ="z"   />
 8    < item  value ="z"   />
 9    < item  value ="@"   />
10    < item  value ="1"   />
11    < item  value ="2"   />
12    < item  value ="6"   />
13    < item  value ="."   />
14    < item  value ="c"   />
15    < item  value ="o"   />
16    < item  value ="m"   />
17 </ data >

 转载请注明出自"菩提树下的杨过"http://www.cnblogs.com/yjmyzz/archive/2009/10/29/1592575.html

你可能感兴趣的:(LINQ)