Asp.Net教程,WinForm教程,Asp.Net MVC,vs2008教程,vs2010教程,Silverlight技术,源码下载,Asp.Net视频教程
全站热门标签
vs2010 Silverlight 存储过程 水晶报表 ADO.NET JavaScript LINQ AjaxPro DataGridView 面向对象 Extjs GridView XML DevExpress HTML教程 Oracle jQuery 分页 GDI+ Visual C++2010 MySQL Office2010 WPF MVC Dojo WCF4.0 VB.NET Sql2005 textbox cookie WCF WinForm Discuz!NT SQL经典语句 T-SQL checkbox ASPxGridView F# asp.net SQL VS2008新特性 DropDownList Access TreeView Ajax VS2008 页面执行时间 Flex 字符串 回调 VB2005 DataSet C#时间 ASP.NET性能优化 用户在线检测 动画
尚未分类LINQ教程 Enterprise技术 性能优化/调试 水晶报表与打印 安全与加密 图形图像 文件处理 基础教程 Web Services 内置对象 控件示例 正则表达式\采集 ADO.NET 缓存\泛型\线程 XML技术 Url重写\静态页 vs2008综合教程
当前位置: 主页 > ASP.NET教程 > LINQ教程 >

Linq To XML

时间:2010-07-11 18:31来源:未知 作者:admin 点击:

首先创建log文件
            string strNow = DateTime.Now.ToString("yyyyMMddhhmmss");

            FileInfo fiXML = new FileInfo(@"XML\xmlLog.xml");
            //如果文件不存在
            if (!(fiXML.Exists))
            {
                //创建xml文档
                XDocument xelLog =new XDocument(
                    new XDeclaration("1.0", "utf-8", "no"),
                    new XElement("ipmsg",
                        new XElement("msg_log",
                            new XElement("user", "Bin"),
                            new XElement("logdate", strNow),
                            new XElement("message", "一条xml linq测试")
                        )
                     )
                 );
                xelLog.Save(@"XML\xmlLog.xml");
            }

如果要给元素加属性用XAttribute,和子节点一起做参数传进去,比如在这里我们想给每条聊天记录都加一个ID:
new XAttribute("logid", "00001"),

输出文档如下:

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<netmsg>
<msg_log logid="00001">
    <user>Bin</user>
    <logdate>20081217090733</logdate>
    <message>一条xml linq测试</message>
</msg_log>
</netmsg>


当然也可以用元素的形式表示ID,个人习惯问题,属性和元素功能基本是一样的,可以互相转换。

一、检索记录

    首先要有检索功能,查看全部聊天记录:
            Array queryXML = LinqHeper.getXmlLOGInFo();
       
    返回Array,自己随意处理,比如:
           dgvStudent.DataSource = queryXML;
   
    下面是getXmlLOGInFo方法:
            //实例化XMLog
            XElement xelem = XElement.Load(@"XML\xmlLog.xml");

            //执行linq检索(xmlLOG)
            var queryXML = from xmlLog in xelem.Descendants("msg_log")
                                     //条件都加在这里,注意条件用双等,多条件用 && 连接
                                     //用户名是Bin的所有记录
                           //where xmlLog.Element("user").Value == "Bin"  

                                     select new {
                                     用户名 = xmlLog.Element("user").Value.ToUpper()
                                  , 时间 = xmlLog.Element("logdate").Value
                                  , 消息 = xmlLog.Element("message").Value
                           };

            return queryXML.ToArray();

    上边的语句也可以写成lambda表达式的形式(其实就是"=>"前是参数,后面是返回值)
            var queryXML = xelem.Descendants("msg_log")
        .Where(x =>( x.Element("logid").Value == "1334255" && x.Element("user").Value == "bin"))
                  .Select(x => new {
                                    用户名 = x.Element("user").Value.ToUpper()
                                    , 时间 = x.Element("logdate").Value
                    , 消息 = x.Element("message").Value });

    不过还是比较推荐前面写的方法,比较直观,方便维护(在这个例子中lambda表达式没有很大优势,一般情况,还是可以减少很多代码的)

    注:如果想分页就用Skip与Take方法,比如queryXML.Skip(45).Take(15)就是第四页(我没有用dgv)
(责任编辑:admin)

Tags:XML LINQ
责任编辑:admin
返回顶部
------分隔线----------------------------
推荐内容
骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价 骆驼户外男 真皮磨砂日常休闲鞋 低帮 2011秋冬新款 专柜正品特价