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 的另一个优势是通过将查询结果用作 XElement 和 XAttribute 对象构造函数的参数,实现了一种功能强大的创建 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文件的更多相关文章
- 使用dom4j处理xml操作xml数据
使用dom4j处理xml操作xml数据 示例代码: public class TestDom4j { public static void main(String[] args) { String x ...
- Linq To Xml操作XML增删改查
对XML文件的操作在平时项目中经常要运用到,比如用于存放一些配置相关的内容:本文将简单运用Linq TO Xml对XML进行操作,主要讲解对XML的创建.加载.增加.查询.修改以及删除:重点在于类XD ...
- 4.Linq To Xml操作XML增删改查
转自https://www.cnblogs.com/wujy/p/3366812.html 对XML文件的操作在平时项目中经常要运用到,比如用于存放一些配置相关的内容:本文将简单运用Linq TO X ...
- 使用Linq快速的操作XML
开始内容之前先分享一段话 有时候,当你知道要做什么的时候就做的很快,比如你要实现个功能,码字的活儿不算很难,做个检索也不会有什么难倒你的.但是,做着做着,你发现好像世界上的工作都在重复,于是你有种心要 ...
- C#操作Xml:linq to xml操作XML
LINQ to XML提供了更方便的读写xml方式.前几篇文章的评论中总有朋友提,你为啥不用linq to xml?现在到时候了,linq to xml出场了. .Net中的System.Xml.Li ...
- linq to xml操作XML(转)
转自:http://www.cnblogs.com/yukaizhao/archive/2011/07/21/linq-to-xml.html LINQ to XML提供了更方便的读写xml方式.前几 ...
- PHP使用DOM XML操作XML[总结]
1.前言 XML树状层次结构鲜明,非常适合作为配置文件.PHP中可以使用DOM XML来操作XML.本文总结一下PHP使用DOM XML创建.添加节点.查询XML文件. 2.使用DOM XML XML ...
- LINQ系列:LINQ to XML操作
LINQ to XML操作XML文件的方法,如创建XML文件.添加新的元素到XML文件中.修改XML文件中的元素.删除XML文件中的元素等. 1. 创建XML文件 string xmlFilePath ...
- Jquery重新学习之六[操作XML数据]
上一章整理有关Jquery操作JSON格式数据,本章则是整理Jquery与XML的交互,因为XML简单易用及运用在很跨平台上的优点,所以项目运用Jquery操作XML还是比较常见:下面的代码来自Jqu ...
随机推荐
- 解决OpenCV JavaCameraView相机preview方向问题
网上找了很多解决都是有问题的,研究了半天源码解决了这个问题.我是从整个相机启动和数据传输的过程着手的,这里捡重点介绍一下,最后会贴上修改后的两个源文件. 首先要知道一个概念. 图里的小圆圈是Home按 ...
- Javascript数组系列三之迭代方法2
今天我们来继续 Javascript 数组系列的文章,上文 <Javascript数组系列二之迭代方法1> 我们说到一些数组的迭代方法,我们在开发项目实战的过程中熟练的使用可以大大提高我们 ...
- C#多线程图片爬虫
写了个简单的多线程图片爬虫,整理一下.数据已经爬下来了,图片URL需要自行拼接,首先从Lawyers表中取的RawData字段,RawData中有一个list字段是json格式的数据,需要的只是lis ...
- Asp.Net WebApi 项目及依赖整理
一.目前版本 Microsoft ASP.NET Web API 2.2 对应程序集版本5.2.3 二.默认生成的配置文件中的内容 <packages> <package id=&q ...
- oracle 压力测试工具benchmarksql
TPC-C测试 TPC-C 于 1992 年 7 月 23 日认可为新的基准测试.TPC(Transaction Processing Performance Council,事务处理性能委员会)-C ...
- AI学习---TensorFlow框架介绍[图+会话+张量+变量OP+API]
TensorFlow的数据流图 TensorFlow的结构分析: 图 + 会话 TensorFlow = 构图阶段(数据与操作的执行步骤被描绘出一个图) + 执行图阶段(使用回话执行构建好的图中操作) ...
- windowsserver2016系统性能和功能对比介绍
一. 性能和可扩性 特征描述 Windows Server 2012/2012 R2 标准版和数据中心 Windows Server 2016 标准版和数据中心 物理内存(主机)支持 每个物理服 ...
- Vue学习之路3-浅析Vue-cli搭建项目后的目录结构
1.前言 Vue并不限制你的代码结构.但是,它规定了一些需要遵守的规则:1.应用层级的状态应该集中到单个store对象中.2.提交mutation是更改状态的唯一方法,并且这个过程是同步的.3.异步逻 ...
- 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 ...
- 用PHP打造一个高性能好用的网站
用PHP打造一个高性能好用的网站 1. 说到高可用的话要提一下redis,用过的都知道redis是一个具备数据库特征的nosql,正好弥补了PHP的瓶颈,个人认为PHP的 瓶颈在于数据库,像Apach ...