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

  • 相关阅读:
    第三次作业,结对编程
    第二次作业
    第一次作业
    最小环问题
    拓扑排序——烦人的幻灯片
    拓扑排序——奖金
    洛谷——P2330 [SCOI2005] 繁忙的都市
    洛谷——P2820 局域网
    最小生成树——最短网络Agri-Net
    最小生成树——城市公交网建设问题
  • 原文地址:https://www.cnblogs.com/sportsky/p/5548882.html
Copyright © 2011-2022 走看看