对XML文件的操作在平时项目中经常要运用到,比如用于存放一些配置相关的内容;本文将简单运用Linq TO Xml对XML进行操作,主要讲解对XML的创建、加载、增加、查询、修改以及删除;重点在于类XDocument、类XElement;本实例是在控制台程序运行,所以对加载的XML文件路径要注意,若XML文件不是代码自运创建时要设置其“复制到输出目录”-始终复制

1:首先看一下实例要加载的XML文件格式:

  1. <?xml version="1.0" encoding="utf-8" standalone="yes"?>
  2. <Root>
  3. <User>
  4. <UserID>1</UserID>
  5. <UserName>踏浪帅</UserName>
  6. </User>
  7. <User>
  8. <UserID>2</UserID>
  9. <UserName>wujunyang</UserName>
  10. </User>
  11. <User>
  12. <UserID>3</UserID>
  13. <UserName>cnblogs</UserName>
  14. </User>
  15. </Root>

2:[加载XML]加载XML文件的内容,假如XML文件不存在则创建一个CreateXmlFile(XmlFile):

  1. string XmlFile=Directory.GetCurrentDirectory()+"//XmlFile//UserXmlFiles.xml";
  2. if (!File.Exists(XmlFile))
  3. {
  4. CreateXmlFile(XmlFile);
  5. }
  6. XDocument xdocument = XDocument.Load(XmlFile); //asp.net XDocument.Load(Server.MapPath("//XmlFile//UserXmlFile.xml"));
  7.  
  8. Console.WriteLine("--------------开始遍历XML节点内容--------------");
  9. var Users = from userInfo in xdocument.Element("Root").Elements() select new { UserID = userInfo.Element("UserID").Value, UserName = userInfo.Element("UserName").Value };
  10. foreach (var item in Users)
  11. {
  12. Console.WriteLine(string.Format("用户ID为:{0};名字为:{1}", item.UserID, item.UserName));
  13. }

运行结果:

3:[创建XML]上面提到假如XML文件不存在则创建一个,并增加我们想要的节点内容

  1. /// <summary>
  2. /// 生成XML文件
  3. /// </summary>
  4. /// <param name="XmlFile">XML保存的路径</param>
  5. private static void CreateXmlFile(string XmlFile)
  6. {
  7. XDocument xdoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"), CreateXElement());
  8. xdoc.Save(XmlFile);
  9. }
  10.  
  11. private static XElement CreateXElement()
  12. {
  13. XElement root = new XElement("Root",new XElement("User",new XElement("UserID",""),new XElement("UserName","踏浪帅")),
  14. new XElement("User", new XElement("UserID", ""), new XElement("UserName", "wujunyang")),
  15. new XElement("User", new XElement("UserID", ""), new XElement("UserName", "cnblogs")));
  16. return root;
  17. }

4:[带条件遍历]带条件进行查询出想要的结果,这边我们查找UserID的值大于1

  1. Console.WriteLine("--------------开始带条件遍历XML节点内容--------------");
  2. var UserForWhere = from userInfo in xdocument.Element("Root").Elements() where Convert.ToInt32(userInfo.Element("UserID").Value) > select new { UserID = userInfo.Element("UserID").Value, UserName = userInfo.Element("UserName").Value };
  3. foreach (var item in UserForWhere)
  4. {
  5. Console.WriteLine(string.Format("用户ID为:{0};名字为:{1}", item.UserID, item.UserName));
  6. }

运行结果:

5:[插入]往XML插入我们想要的值,此处我们再增加一个

  1. Console.WriteLine("--------------往XML文件里再插入一个节点的内容--------------");
  2. XElement InsertRoot = new XElement("User", new XElement("UserID", ""), new XElement("UserName", "厦门"));
  3. xdocument.Element("Root").Add(InsertRoot);
  4. xdocument.Save(XmlFile);
  5. Console.WriteLine("插入节点成功");

运行结果:

XML文件内容变成:

  1. <?xml version="1.0" encoding="utf-8" standalone="yes"?>
  2. <Root>
  3. <User>
  4. <UserID>1</UserID>
  5. <UserName>踏浪帅</UserName>
  6. </User>
  7. <User>
  8. <UserID>2</UserID>
  9. <UserName>wujunyang</UserName>
  10. </User>
  11. <User>
  12. <UserID>3</UserID>
  13. <UserName>cnblogs</UserName>
  14. </User>
  15. <User>
  16. <UserID>4</UserID>
  17. <UserName>厦门</UserName>
  18. </User>
  19. </Root>

6:[更新]对节点下某个值进行更新,通过条件进行查找出来再更新

  1. Console.WriteLine("--------------更新XML文件里节点的内容--------------");
  2. XElement UserUpdate = (from userInfo in xdocument.Element("Root").Elements() where Convert.ToInt32(userInfo.Element("UserID").Value) == select userInfo).SingleOrDefault();
  3. if (UserUpdate != null)
  4. {
  5. UserUpdate.Element("UserName").Value = "www.cnblogs.com/wujy";
  6. xdocument.Save(XmlFile);
  7. }
  8. Console.WriteLine("更新节点成功");

运行结果:

7:[删除]针对某个条件对XML中的某一项进行删除

  1. Console.WriteLine("--------------删除XML文件里节点的内容--------------");
  2. XElement UserDelete = (from userInfo in xdocument.Element("Root").Elements() where Convert.ToInt32(userInfo.Element("UserID").Value) == select userInfo).SingleOrDefault();
  3. if (UserDelete != null)
  4. {
  5. UserDelete.Remove();
  6. xdocument.Save(XmlFile);
  7. }
  8. Console.WriteLine("删除节点成功");

运行结果:

8:除的上面提到值还有一种是属性如下面:

  1. <?xml version="1.0" encoding="utf-8" standalone="yes"?>
  2. <Root>
  3. <User UserName="wujy" PassWord="" Age="" />
  4. <User UserName="cnblogs" PassWord="" Age="" />
  5. <User UserName="踏浪帅" PassWord="" Age="" />
  6. </Root>

最近碰到一字符串的XML,接着我们就实现把它转化为一个实体:

  1. public class User
  2. {
  3. public string UserName { get; set; }
  4.  
  5. public string PassWord { get; set; }
  6.  
  7. public string Age { get; set; }
  8. }
  1. private static void CreateXmlFile(string XmlFile)
  2. {
  3. XDocument xdoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"), CreateXElement());
  4. xdoc.Save(XmlFile);
  5. }
  6.  
  7. private static XElement CreateXElement()
  8. {
  9. XElement root = new XElement("Root", new XElement("User", new XAttribute("UserName", "wujy"), new XAttribute("PassWord", ""), new XAttribute("Age", "")),
  10. new XElement("User", new XAttribute("UserName", "cnblogs"), new XAttribute("PassWord", ""), new XAttribute("Age", "")),
  11. new XElement("User", new XAttribute("UserName", "踏浪帅"), new XAttribute("PassWord", ""), new XAttribute("Age", "")));
  12. return root;
  13. }
  14.  
  15. public static List<User> DindDB()
  16. {
  17. List<User> list = new List<User>();
  18. XDocument xdoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"), CreateXElement());
  19. string XmlStr = xdoc.ToString();
  20. byte[] ARRAY=Encoding.UTF8.GetBytes(cleanStringEmpty(XmlStr));
  21. MemoryStream stream=new MemoryStream(ARRAY);
  22. StreamReader READER=new StreamReader(stream);
  23. XDocument xmdo = XDocument.Load(READER);
  24.  
  25. var ResultUsers = from userInfo in xmdo.Elements("Root").Elements("User") select new { UserName = userInfo.Attribute("UserName").Value, PassWord = userInfo.Attribute("PassWord").Value, Age = userInfo.Attribute("Age").Value };
  26. foreach (var item in ResultUsers)
  27. {
  28. User model = new User();
  29. model.UserName = item.UserName;
  30. model.PassWord = item.PassWord;
  31. model.Age = item.Age;
  32. list.Add(model);
  33. }
  34. return list;
  35. }
  36.  
  37. private static string cleanStringEmpty(string str)
  38. {
  39. if (!string.IsNullOrEmpty(str))
  40. {
  41. StringBuilder sb = new StringBuilder();
  42. string[] newStr = str.ToString().Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
  43. for (int i = ; i < newStr.Length; i++)
  44. {
  45. sb.Append(newStr[i].Trim());
  46. }
  47. return sb.ToString();
  48. }
  49. else
  50. {
  51. return null;
  52. }
  53. }

如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】按钮,若有不足欢迎指正。  因为,我的写作热情也离不开您的肯定支持。
 
感谢您的阅读(源代码下载

Linq To Xml操作XML增删改查的更多相关文章

  1. java对xml文件做增删改查------摘录

    java对xml文件做增删改查 package com.wss; import java.io.File;import java.util.ArrayList;import java.util.Lis ...

  2. js操作indexedDB增删改查示例

    js操作indexedDB增删改查示例 if ('indexedDB' in window) { // 如果数据库不存在则创建,如果存在但是version更大,会自动升级不会复制原来的版本 var r ...

  3. MySQL数据分析(16)— 数据操作之增删改查

    前面我们说学习MySQL要从三个层面,四大逻辑来学,三个层面就是库层面,表层面和数据层面对吧,数据库里放数据表,表里放数据是吧,大家可以回忆PPT中jacky的这图,我们已经学完了库层面和表层面,从本 ...

  4. Redis简单的数据操作(增删改查)

    #Redis简单的数据操作(增删改查): 字符串类型 string 1. 存储: set key value 127.0.0.1:6379> set username zhangsan OK 2 ...

  5. 使用dom4j对xml文件进行增删改查

    1.使用dom4j技术对dom_demo.xml进行增删改查 首选要下载dom4j的jar包 在官网上找不到,网上搜索了一下在这个链接:http://sourceforge.net/projects/ ...

  6. Linq 数据库操作(增删改查)

    Linq数据库增删改查 Linq是一种查询语言,集成包含在formwork中,包含在C#语言中,它的作用是降低查询的门槛,提高开发效率,是我们必须掌握的技术之一,下面是我自己对linq数据库操作的方法 ...

  7. XML(五)dom4j增删改查

    book2.xml <? xml version="1.0" encoding="UTF-8"?> <书架> <书> < ...

  8. 通过Java代码实现对数据库的数据进行操作:增删改查

    在写代码之前,依然是引用mysql数据库的jar包文件:右键项目-构建路径-设置构建路径-库-添加外部JAR 在数据库中我们已经建立好一个表xs :分别有xuehao  xingming    xue ...

  9. LinQ 创建连接、简单增删改查

    LINQ--语言集成查询(Language Integrated Query)是一组用于c#和Visual Basic语言的扩展.它允许编写C#或者Visual Basic代码以查询数据库相同的方式操 ...

  10. spring boot快速入门 4: jpa数据库操作 实现增删改查

    spring boot jpa逆向生成表 简单实例: 第一步:pom文件: <?xml version="1.0" encoding="UTF-8"?&g ...

随机推荐

  1. JAVA RSA非对称加密详解[转载]

    一.概述1.RSA是基于大数因子分解难题.目前各种主流计算机语言都支持RSA算法的实现2.java6支持RSA算法3.RSA算法可以用于数据加密和数字签名4.RSA算法相对于DES/AES等对称加密算 ...

  2. mysql客户端连不上数据库

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; flush privileges ...

  3. Android逆向之smali学习

    Smali是Android虚拟机Dalvik反汇编的结果. Dalvik指令集 指令格式为:[op]-[type](可选)/[位宽,默认4位] [目标寄存器],[源寄存器](可选) 赋值:move*  ...

  4. git配置全局用户名

    点击右键 ,点击git bash here 在控制面板输入 git config --global user.name "xxx" git config --global user ...

  5. 「ZJOI2018」历史(LCT)

    「ZJOI2018」历史(LCT) \(ZJOI\) 也就数据结构可做了-- 题意:给定每个点 \(access\) 次数,使轻重链切换次数最大,带修改. \(30pts:\) 挺好想的.发现切换次数 ...

  6. 了解iOS消息推送一文就够:史上最全iOS Push技术详解

    本文作者:陈裕发, 腾讯系统测试工程师,由腾讯WeTest整理发表. 1.引言 开发iOS系统中的Push推送,通常有以下3种情况: 1)在线Push:比如QQ.微信等IM界面处于前台时,聊天消息和指 ...

  7. Node.js项目拆包工程化

    背景 在我们开发的过程中,经常会遇到这样的问题,开发完了一些代码或者一个接口,别的小伙伴过来问你,代码可不可以给他复用,接口可以给他调用.这说明代码的复用和抽象对团队协作是很重要的.举个例子,如下图 ...

  8. iOS学习——(转)iOS中关于通知的使用

    在移动端开打过程中,经常会用到通知和推送,例如有短信来了需要通知提示,手机横屏了需要通知提示,插上耳机了需要通知提示等等,我们可以根据这些通知采取对应的动作.iOS系统自身定义了很对通知,但是在开发过 ...

  9. python基础-文件操作(10)

    一.什么是文件 等等这些都叫做文件,各种格式的.但不仅仅限制于这些. 二.文件的作用 大家应该听说过一句话:“好记性不如烂笔头”. 不仅人的大脑会遗忘事情,计算机也会如此,比如一个程序在运行过程中用了 ...

  10. 2.java面向对象类与类/类与对象之间关系详解

    继承.实现.依赖.关联.聚合.组合的联系与区别 下面的内容很基础,同时也很简单,但是也很重要. 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功 ...