Linq To Xml操作XML增删改查

转自:http://www.tuicool.com/articles/E7FZRv

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

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

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root>
  <User>
    <UserID>1</UserID>
    <UserName>踏浪帅</UserName>
  </User>
  <User>
    <UserID>2</UserID>
    <UserName>wujunyang</UserName>
  </User>
  <User>
    <UserID>3</UserID>
    <UserName>cnblogs</UserName>
  </User>
</Root>

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

string XmlFile=Directory.GetCurrentDirectory()+"//XmlFile//UserXmlFiles.xml";
            if (!File.Exists(XmlFile))
            {
                CreateXmlFile(XmlFile);
            }
            XDocument xdocument = XDocument.Load(XmlFile);    //asp.net  XDocument.Load(Server.MapPath("//XmlFile//UserXmlFile.xml"));

            Console.WriteLine("--------------开始遍历XML节点内容--------------");
            var Users = from userInfo in xdocument.Element("Root").Elements() select new { UserID = userInfo.Element("UserID").Value, UserName = userInfo.Element("UserName").Value };
            foreach (var item in Users)
            {
                Console.WriteLine(string.Format("用户ID为:{0};名字为:{1}", item.UserID, item.UserName));
            }

运行结果: 

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

/// <summary>
        /// 生成XML文件
        /// </summary>
        /// <param name="XmlFile">XML保存的路径</param>
        private static void CreateXmlFile(string XmlFile)
        {
            XDocument xdoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"), CreateXElement());
            xdoc.Save(XmlFile);
        }

        private static XElement CreateXElement()
        {
            XElement root = new XElement("Root",new XElement("User",new XElement("UserID","1"),new XElement("UserName","踏浪帅")),
                new XElement("User", new XElement("UserID", "2"), new XElement("UserName", "wujunyang")),
                new XElement("User", new XElement("UserID", "3"), new XElement("UserName", "cnblogs")));
            return root;
        }

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

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

运行结果: 

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

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

运行结果: 

XML文件内容变成:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root>
  <User>
    <UserID>1</UserID>
    <UserName>踏浪帅</UserName>
  </User>
  <User>
    <UserID>2</UserID>
    <UserName>wujunyang</UserName>
  </User>
  <User>
    <UserID>3</UserID>
    <UserName>cnblogs</UserName>
  </User>
  <User>
    <UserID>4</UserID>
    <UserName>厦门</UserName>
  </User>
</Root>

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

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

运行结果: 

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

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

运行结果: 

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值