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. 解决OpenCV JavaCameraView相机preview方向问题

    网上找了很多解决都是有问题的,研究了半天源码解决了这个问题.我是从整个相机启动和数据传输的过程着手的,这里捡重点介绍一下,最后会贴上修改后的两个源文件. 首先要知道一个概念. 图里的小圆圈是Home按 ...

  2. Javascript数组系列三之迭代方法2

    今天我们来继续 Javascript 数组系列的文章,上文 <Javascript数组系列二之迭代方法1> 我们说到一些数组的迭代方法,我们在开发项目实战的过程中熟练的使用可以大大提高我们 ...

  3. C#多线程图片爬虫

    写了个简单的多线程图片爬虫,整理一下.数据已经爬下来了,图片URL需要自行拼接,首先从Lawyers表中取的RawData字段,RawData中有一个list字段是json格式的数据,需要的只是lis ...

  4. Asp.Net WebApi 项目及依赖整理

    一.目前版本 Microsoft ASP.NET Web API 2.2 对应程序集版本5.2.3 二.默认生成的配置文件中的内容 <packages> <package id=&q ...

  5. oracle 压力测试工具benchmarksql

    TPC-C测试 TPC-C 于 1992 年 7 月 23 日认可为新的基准测试.TPC(Transaction Processing Performance Council,事务处理性能委员会)-C ...

  6. AI学习---TensorFlow框架介绍[图+会话+张量+变量OP+API]

    TensorFlow的数据流图 TensorFlow的结构分析: 图 + 会话 TensorFlow = 构图阶段(数据与操作的执行步骤被描绘出一个图) + 执行图阶段(使用回话执行构建好的图中操作) ...

  7. windowsserver2016系统性能和功能对比介绍

    一. 性能和可扩性  特征描述 Windows Server 2012/2012 R2  标准版和数据中心 Windows Server 2016  标准版和数据中心 物理内存(主机)支持 每个物理服 ...

  8. Vue学习之路3-浅析Vue-cli搭建项目后的目录结构

    1.前言 Vue并不限制你的代码结构.但是,它规定了一些需要遵守的规则:1.应用层级的状态应该集中到单个store对象中.2.提交mutation是更改状态的唯一方法,并且这个过程是同步的.3.异步逻 ...

  9. Why do Kafka consumers connect to zookeeper, and producers get metadata from brokers?

    Why do Kafka consumers connect to zookeeper, and producers get metadata from brokers? Ask Question u ...

  10. 用PHP打造一个高性能好用的网站

    用PHP打造一个高性能好用的网站 1. 说到高可用的话要提一下redis,用过的都知道redis是一个具备数据库特征的nosql,正好弥补了PHP的瓶颈,个人认为PHP的 瓶颈在于数据库,像Apach ...