返回顶部

Linq to XML操作XML文件

LINQ的类型

在MSDN官方文件中,LINQ分为几种类型:

LINQ to Objects(或称LINQ to Collection),这是LINQ的基本功能,针对集合对象进行查询处理,包括基本的汇总与过滤都在这个功能内实现。

LINQ to SQL,这是LINQ功能的SQL Server数据库版本,通过LINQ指令,可以直接查询SQL Server数据库,而完全无须编写SQL指令,这个功能在推出初期受到了相当大的关注,目前这个功能已经融入EF内。

LINQ to XML,是针对XML设计的LINQ功能,它通过XDocument与XElement两个主要类的功能,进行LINQ语法解析与XML内的元素的查询操作。可用来替代现有以XPath方式解析XML文件的功能。

LINQ to DataSet(或称LINQ to ADO.NET),是为现有以DataSet或DataTable对象开发应用程序提供支持LINQ操作的功能,以AsEnumerate()为基础,将DataSet与DataTable内的数据转换成IEnumerable接口的集合对象,即可直接使用LINQ to Objects的方式查询。

什么是LINQ to XML?

LINQ to XML 是一种启用了 LINQ 的内存 XML 编程接口,使用它,可以在 .NET Framework 编程语言中处理 XML。

LINQ to XML 将 XML 文档置于内存中,这一点很像文档对象模型 (DOM)。您可以查询和修改 XML 文档,修改之后,可以将其另存为文件,也可以将其序列化然后通过 Internet 发送。但是,LINQ to XML 与 DOM 不同:它提供一种新的对象模型,这是一种更轻量的模型,使用也更方便,这种模型利用了 Visual C# 2008 在语言方面的改进。

LINQ to XML 最重要的优势是它与 语言集成查询 (LINQ) 的集成。由于实现了这一集成,因此,可以对内存 XML 文档编写查询,以检索元素和属性的集合。LINQ to XML 的查询功能在功能上(尽管不是在语法上)与 XPath 和 XQuery 具有可比性。Visual C# 2008 集成 LINQ 后,可提供更强的类型化功能、编译时检查和改进的调试器支持。

LINQ to XML 的另一个优势是通过将查询结果用作 XElementXAttribute 对象构造函数的参数,实现了一种功能强大的创建 XML 树的方法。这种方法称为“函数构造”,利用这种方法,开发人员可以方便地将 XML 树从一种形状转换为另一种形状。

下面是对于XML文件的相关操作。。。。。。

1、导出XML

 

        /// <summary>
        /// 导出XML
        /// </summary>
        /// <returns></returns>
        public ActionResult ReportXml()
        {
            try
            {
#if DEBUG
                List<UserInfo> user = new List<UserInfo>()
                                { 
                                new UserInfo(){UserId="1",UserName="张三",UserSex="",UserAge=18},
                                new UserInfo(){UserId="2",UserName="李四",UserSex="",UserAge=18},
                                new UserInfo(){UserId="3",UserName="王五",UserSex="",UserAge=18},
                                new UserInfo(){UserId="4",UserName="赵六",UserSex="",UserAge=18},
                                };
#endif
                XmlTextWriter myXml = new XmlTextWriter(@"C:\User.xml", null);
                // 设置缩进
                myXml.Formatting = Formatting.Indented;
                // 编写版本为“1.0”并具有独立特性的 XML 声明。
                myXml.WriteStartDocument(false);
                myXml.WriteStartElement("UserInfo");
                // 注释
                myXml.WriteComment("记录用户的信息");
                foreach (var item in user)
                {
                    myXml.WriteStartElement("User");
                    myXml.WriteAttributeString("UserId", item.UserId.ToString());
                    myXml.WriteElementString("UserName", item.UserName);
                    myXml.WriteElementString("UserSex", item.UserSex);
                    myXml.WriteElementString("UserAge", item.UserAge.ToString());
                    myXml.WriteEndElement();
                }
                myXml.Flush();
                myXml.Close();
                return Json(new { msg = "导出成功" }, JsonRequestBehavior.AllowGet);
            }
            catch (Exception)
            {
                return Json(new { msg = "导出失败" }, JsonRequestBehavior.AllowGet);
            }

        }

2、读取XML

 

        /// <summary>
        /// 读取XML
        /// </summary>
        /// <returns></returns>
        public ActionResult ReadXml()
        {
            List<UserInfo> list = new List<UserInfo>();
            XElement xe = XElement.Load(@"C:\User.xml");
            IEnumerable<XElement> elements = from p in xe.Elements("User") select p;
            foreach (var item in elements)
            {
                UserInfo user = new UserInfo();
                user.UserId = item.Attribute("UserId").Value;
                user.UserName = item.Element("UserName").Value;
                user.UserSex = item.Element("UserSex").Value;
                user.UserAge = int.Parse(item.Element("UserAge").Value);
                list.Add(user);
            }
            return Json(list.ToList(), JsonRequestBehavior.AllowGet);
        }

3、删除一条XML数据

 

        /// <summary>
        /// 删除XML
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        public ActionResult DeleteXML(string userId)
        {
            try
            {
                XElement xe = XElement.Load(@"C:\User.xml");
                IEnumerable<XElement> elements = from p in xe.Elements("User")
                                                 where p.Attribute("UserId").Value == userId.ToString()
                                                 select p;
                if (elements.Count() > 0)
                {
                    elements.Remove();
                }
                xe.Save(@"C:\User.xml");
                return Json(new { flag = true }, JsonRequestBehavior.AllowGet);
            }
            catch (Exception)
            {
                return Json(new { flag = false }, JsonRequestBehavior.AllowGet);
            }

        }

 

4、添加一条XML数据

 

        /// <summary>
        /// 新增XML
        /// </summary>
        /// <returns></returns>
        public ActionResult AddXML()
        {
            try
            {
                XElement xe = XElement.Load(@"C:\User.xml");
                XElement record = new XElement(
                                  new XElement("User",
                                  new XAttribute("UserId", Guid.NewGuid()),
                                  new XElement("UserName", "张学友"),
                                  new XElement("UserSex", ""),
                                  new XElement("UserAge", "20")
                                 ));
                xe.Add(record);
                xe.Save(@"C:\User.xml");
                return Json(new { flag = true }, JsonRequestBehavior.AllowGet);
            }
            catch (Exception)
            {
                return Json(new { flag = false }, JsonRequestBehavior.AllowGet);
            }

        }

 

5、修改一条XML数据

 

        /// <summary>
        /// 编辑XML
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        public ActionResult EditXML(string userId)
        {
            try
            {
                XElement xe = XElement.Load(@"C:\User.xml");
                IEnumerable<XElement> elements = from p in xe.Elements("User")
                                                 where p.Attribute("UserId").Value == userId.ToString()
                                                 select p;
                if (elements.Count() > 0)
                {
                    XElement model = elements.FirstOrDefault();
                    // 设置新属性
                    model.SetAttributeValue("UserId", userId);
                    // 更新新节点
                    model.ReplaceNodes
                        (
                        new XElement("UserName", "周杰伦"),
                        new XElement("UserSex", ""),
                        new XElement("UserAge", 30)
                        );
                }
                xe.Save(@"C:\User.xml");
                return Json(new { flag = true }, JsonRequestBehavior.AllowGet);
            }
            catch (Exception)
            {
                return Json(new { flag = false }, JsonRequestBehavior.AllowGet);
            }
        }

 6、前台页面代码

 

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <script src="~/Scripts/jquery-1.10.2.js"></script>
    <script type="text/javascript">
        $(function () {
            $("#btnReport").click(function () {
                ReportXml();
            });
            $("#btnRead").click(function () {
                ReadXml();
            });
            $(document).on({
                click: function (e) {
                    DeleteXML($(this).attr("userId"));
                }
            }, ".btndelete");
            $("#btnAdd").click(function () {
                AddXML();
            });
            $(document).on({
                click: function (e) {
                    EditXML($(this).attr("userId"));
                }
            }, ".btnEdit");
        });
        // 导出XML
        function ReportXml() {
            var option =
                {
                    url: '/XML/ReportXml',
                    type: "post",
                    success: function (data) {
                        if (data.msg) {
                            alert("导出成功!");
                        }
                        else {
                            alert("导出失败!");
                        }
                    }
                };
            $.ajax(option);
        }
        // 读取XML
        function ReadXml() {
            var option =
                {
                    url: '/XML/ReadXml',
                    type: "get",
                    success: function (data) {
                        $("#tb_table tr:gt(0)").remove();
                        var html = "";
                        $.each(data, function (index, item) {
                            html += "<tr>";
                            html += "<td>" + item.UserName + "</td>";
                            html += "<td>" + item.UserSex + "</td>";
                            html += "<td>" + item.UserAge + "</td>";
                            html += "<td><input class='btndelete' type='button' userId='" + item.UserId + "'  value='删除'/><input class='btnEdit' type='button' userId='" + item.UserId + "'  value='修改'/></td>";
                            html += "</tr>";
                        });
                        $("#tb_table").append(html);
                    }
                };
            $.ajax(option);
        }

        // 删除
        function DeleteXML(userId) {
            if (confirm("确定要删除吗?")) {
                var option =
                {
                    url: '/XML/DeleteXML',
                    type: 'get',
                    data: { userId: userId },
                    success: function (data) {
                        if (data.flag) {
                            alert("删除成功!");
                            ReadXml();
                        }
                        else {
                            alert("删除失败!");
                        }
                    }
                };
                $.ajax(option);
            }

        }
        // 添加XML
        function AddXML() {
            var options =
            {
                url: '/XML/AddXML',
                type: 'get',
                success: function (data) {
                    if (data.flag) {
                        alert("新增成功!");
                        ReadXml();
                    }
                    else {
                        alert("新增失败!");
                    }
                }
            };
            $.ajax(options);
        }
        // 修改XML
        function EditXML(userId) {
            var options =
            {
                url: '/XML/EditXML',
                type: 'get',
                data: { userId: userId },
                success: function (data) {
                    if (data.flag) {
                        alert("修改成功!");
                        ReadXml();
                    }
                    else {
                        alert("修改失败!");
                    }
                }
            };
            $.ajax(options);
        }
    </script>

</head>
<body>
    <div>
        <input type="button" value="导出XML" id="btnReport" />
        <input type="button" value="读取XML" id="btnRead" />
        <input type="button" value="添加XML" id="btnAdd" />
    </div>
    <br /><br />
    <table id="tb_table" border="1">
        <tr>
            <td>姓名</td>
            <td>性别</td>
            <td>年龄</td>
            <td>操作</td>
        </tr>
    </table>
    <br />

</body>
</html>

 7、页面效果

权责申明

作者:SportSky 出处: http://www.cnblogs.com/sportsky/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果觉得还有帮助的话,可以点一下右下角的【推荐】,希望能够持续的为大家带来好的技术文章!想跟我一起进步么?那就【关注】我吧。

 

posted @ 2016-06-28 09:19  SportSky  阅读(716)  评论(0编辑  收藏  举报
作者:SportSky 出处: http://www.cnblogs.com/sportsky/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果觉得还有帮助的话,可以点一下右下角的【推荐】,希望能够持续的为大家带来好的技术文章!想跟我一起进步么?那就【关注】我吧。