zoukankan      html  css  js  c++  java
  • 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

     1XElement 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

     1XElement 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语法,可以写得更精简,这也是我最喜欢的方式
    12var query = root.XPathSelectElements("item[@src]");
    13
    14foreach (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.带循环的"复杂"创建节点

     1XElement root = new XElement("data");
     2
     3var _arr = "y j m y z z @ 1 2 6 . c o m".Split(' ');
     4
     5foreach (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

    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    OLAP ODS项目的总结 平台选型,架构确定
    ORACLE ORA12520
    ORACLE管道函数
    ORACLE RAC JDBC 配置
    ORACLE RAC OCFS连接产生的错误
    ORACLE 启动和关闭详解
    OLAP ODS项目的总结 起步阶段
    ORACLE RAC 配置更改IP
    ORACLE RAC OCR cann't Access
    ORACLE RAC Debug 之路 CRS0184错误与CRS初始化
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/1592575.html
Copyright © 2011-2022 走看看