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="",UserName="张三",UserSex="男",UserAge=},
new UserInfo(){UserId="",UserName="李四",UserSex="男",UserAge=},
new UserInfo(){UserId="",UserName="王五",UserSex="男",UserAge=},
new UserInfo(){UserId="",UserName="赵六",UserSex="女",UserAge=},
};
#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() > )
{
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", "")
));
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() > )
{
XElement model = elements.FirstOrDefault();
// 设置新属性
model.SetAttributeValue("UserId", userId);
// 更新新节点
model.ReplaceNodes
(
new XElement("UserName", "周杰伦"),
new XElement("UserSex", "男"),
new XElement("UserAge", )
);
}
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/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果觉得还有帮助的话,可以点一下右下角的【推荐】,希望能够持续的为大家带来好的技术文章!想跟我一起进步么?那就【关注】我吧。

Linq to XML操作XML文件的更多相关文章

  1. 使用dom4j处理xml操作xml数据

    使用dom4j处理xml操作xml数据 示例代码: public class TestDom4j { public static void main(String[] args) { String x ...

  2. Linq To Xml操作XML增删改查

    对XML文件的操作在平时项目中经常要运用到,比如用于存放一些配置相关的内容:本文将简单运用Linq TO Xml对XML进行操作,主要讲解对XML的创建.加载.增加.查询.修改以及删除:重点在于类XD ...

  3. 4.Linq To Xml操作XML增删改查

    转自https://www.cnblogs.com/wujy/p/3366812.html 对XML文件的操作在平时项目中经常要运用到,比如用于存放一些配置相关的内容:本文将简单运用Linq TO X ...

  4. 使用Linq快速的操作XML

    开始内容之前先分享一段话 有时候,当你知道要做什么的时候就做的很快,比如你要实现个功能,码字的活儿不算很难,做个检索也不会有什么难倒你的.但是,做着做着,你发现好像世界上的工作都在重复,于是你有种心要 ...

  5. C#操作Xml:linq to xml操作XML

    LINQ to XML提供了更方便的读写xml方式.前几篇文章的评论中总有朋友提,你为啥不用linq to xml?现在到时候了,linq to xml出场了. .Net中的System.Xml.Li ...

  6. linq to xml操作XML(转)

    转自:http://www.cnblogs.com/yukaizhao/archive/2011/07/21/linq-to-xml.html LINQ to XML提供了更方便的读写xml方式.前几 ...

  7. PHP使用DOM XML操作XML[总结]

    1.前言 XML树状层次结构鲜明,非常适合作为配置文件.PHP中可以使用DOM XML来操作XML.本文总结一下PHP使用DOM XML创建.添加节点.查询XML文件. 2.使用DOM XML XML ...

  8. LINQ系列:LINQ to XML操作

    LINQ to XML操作XML文件的方法,如创建XML文件.添加新的元素到XML文件中.修改XML文件中的元素.删除XML文件中的元素等. 1. 创建XML文件 string xmlFilePath ...

  9. Jquery重新学习之六[操作XML数据]

    上一章整理有关Jquery操作JSON格式数据,本章则是整理Jquery与XML的交互,因为XML简单易用及运用在很跨平台上的优点,所以项目运用Jquery操作XML还是比较常见:下面的代码来自Jqu ...

随机推荐

  1. (办公)Spring boot(系列)的返回json封装类

    package com.imooc.util; import com.fasterxml.jackson.databind.ObjectMapper; /** * 自定义响应数据结构: * 这个类是提 ...

  2. git多个远程仓库

    1. 前言   用GitHub管理自己的开源项目有几年了,最近一年更新得比较多,仓库也越来越多越来越大.有时候感觉GitHub太慢,尤其是最近感觉更为明显,于是萌生了再找个国内类似GitHub的代码托 ...

  3. 服务端如何获取客户端请求IP地址

    服务端获取客户端请求IP地址,常见的包括:x-forwarded-for.client-ip等请求头,以及remote_addr参数. 一.remote_addr.x-forwarded-for.cl ...

  4. PhantomJs浏览器下载

    下载地址: http://phantomjs.org/download.html 链接:https://pan.baidu.com/s/1g9ZHLm0Fg56LN30CsDu-CA 密码:qhar

  5. 远程连接MySQL数据库问题总结

    远程连接MySQL数据库时,陆陆续续遇到了一些杂七杂八的问题,相信很多人也曾经遇到过这类问题,下面总结归纳在下面,方便以后直接查找. 1:出现ERROR 2003 (HY000): Can't con ...

  6. mssql sqlserver避免sql脚本中出现除零错误的方法分享

    摘自:http://www.maomao365.com/?p=6612 摘要:下文介绍sql server中,sql脚本避免出现除零错误的方法分享 在各种业务系统开发中,通常会遇到除零的错误,下文分享 ...

  7. c/c++ 智能指针 shared_ptr 使用

    智能指针 shared_ptr 使用 上一篇智能指针是啥玩意,介绍了什么是智能指针. 这一篇简单说说如何使用智能指针. 一,智能指针分3类:今天只唠唠shared_ptr shared_ptr uni ...

  8. jQuery设置radio、select、checkbox只读属性后,如何在后台得到数据

    1 设置表单的readonly属性 对于radio.select.checkbox来说,readonly属性对这三个标签不起什么作用. 2 设置表单的disabled属性 以radio为例说明. 代码 ...

  9. #005Python实验楼基本操作学习笔记

    Ctrl + D 输入一个 EOF 字符来退出解释器,也可以键入 exit() 来退出解释器. 打开 Xfce 终端,键入 vim helloworld.py 来启动 Vim 并编辑 hellowor ...

  10. nginx 拦截 swagger 登录

    随着微服务的也来越多,每个服务都有单独的文档,那么问题来了,怎么把所有文档整合在一起呢 本方法采用服务器拦截的方式进行处理 首先需要在opt 的主目录中 /opt/ 创建一个新文件 htpasswd此 ...