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 ...
随机推荐
- Apktool(2)——使用前必须知道的apk知识
这里拿testapp.apk为例,如下图所示,左图为直接解压apk得到的文件,右图为apktool反编译得到的文件(反编译的使用在下一篇重点介绍) 图1 解压apk和反编译apk得到的文件目录对比 一 ...
- (其他)Thinkpad笔记本装系统
电脑城装一次系统收你40元,不如自己装系统. 虽然百度上装系统的文章泛滥,但是还是自己尝试. 前3个小时thinkpad e570是不是坏掉了,怎么就进不去BIOS,这个时候直接搜索这个型号,问题输入 ...
- 远程连接MySQL数据库问题总结
远程连接MySQL数据库时,陆陆续续遇到了一些杂七杂八的问题,相信很多人也曾经遇到过这类问题,下面总结归纳在下面,方便以后直接查找. 1:出现ERROR 2003 (HY000): Can't con ...
- web前端(6)—— 标签的属性,分类,嵌套
属性 HTML标签可以设置属性,属性一般以键值对的方式写在开始标签中 1.HTML标签除一些特定属性外可以设置自定义属性,一个标签可以设置多个属性用空格分隔,多个属性不区分先后顺序. 2.属性值要用引 ...
- c/c++ allocator 使用
allocator 使用 作用:只开辟空间,不调用构造函数 操作一览表 allocator<T> a 定义一个名为a的allocator对象,它可以为类型为T的对象分配内存 a.alloc ...
- c/c++赋值函数(重载=号运算符)
c/c++赋值函数(重载=号运算符) 首先c++里的各种运算符都是用函数实现的,比如=,就等号函数. 所以当用=给一个对象赋值的时候,实际调用的是=号所对应的=号函数. 分析下面的代码 #includ ...
- iOS 键盘上方增加工具栏
UIToolbar *keyboardDoneButtonView = [[UIToolbar alloc] init]; [keyboardDoneButtonView sizeToFit]; UI ...
- JaveScript 中使用 XSLT转换XML文档
我们经常将数据存储在XML 中,在展示的时候需要转换为其它的形式,这里介绍使用XSLT 对XML数据进行转换. 要学习XSLT对XML的转换,需要先了解三个文件. 第一个是存储数据的XML文件:emp ...
- LeetCode算法题-Range Sum Query Immutable(Java实现)
这是悦乐书的第204次更新,第214篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第70题(顺位题号是303).给定整数数组nums,找到索引i和j(i≤j)之间的元素之 ...
- rem实现自适应
总结一下,rem实现自适应:用rem代替px,配合媒体查询设置font-size:n%. 首先,px是死的.若一律用px,那就会大的显得小,小的屏幕显得大.其次,rem是活的,通过设置字体大小可以引起 ...