前言

先来了解下操作XML所涉及到的几个类及之间的关系  如果大家发现少写了一些常用的方法,麻烦在评论中指出,我一定会补上的!谢谢大家

* 1 XMLElement 主要是针对节点的一些属性进行操作
* 2 XMLDocument 主要是针对节点的CUID操作
* 3 XMLNode 为抽象类,做为以上两类的基类,提供一些操作节点的方法

清楚了以上的关系在操作XML时会更清晰一点

具体操作(C#)

  以下会对Xml的结点与属性做增 删 改 查的操作也满足了实际工作中的大部分情况

先构造一棵XML树如下,其中也涉及到了写入xml文档的操作

          public void CreatXmlTree(string xmlPath)

          {

              XElement xElement = new XElement(

                  new XElement("BookStore",

                      new XElement("Book",

                          new XElement("Name", "C#入门", new XAttribute("BookName", "C#")),

                          new XElement("Author", "Martin", new XAttribute("Name", "Martin")),

                          new XElement("Adress", "上海"),

                          new XElement("Date", DateTime.Now.ToString("yyyy-MM-dd"))

                         ),

                     new XElement("Book",

                         new XElement("Name", "WCF入门", new XAttribute("BookName", "WCF")),

                         new XElement("Author", "Mary", new XAttribute("Name", "Mary")),

                         new XElement("Adress", "北京"),

                         new XElement("Date", DateTime.Now.ToString("yyyy-MM-dd"))

                         )

                         )

                 );

             //需要指定编码格式,否则在读取时会抛:根级别上的数据无效。 第 1 行 位置 1异常

             XmlWriterSettings settings = new XmlWriterSettings();

             settings.Encoding = new UTF8Encoding(false);

             settings.Indent = true;

             XmlWriter xw = XmlWriter.Create(xmlPath,settings);

             xElement.Save(xw); http://mingzi.78name.com

             //写入文件

             xw.Flush();

             xw.Close();

         }

然后得到如下的XML树

 1 <?xml version="1.0" encoding="utf-8"?>

 2 <BookStore>

 3     <Book>

 4         <Name BookName="C#">C#入门</Name>

 5         <Author Name="Martin">Martin</Author>

 6         <Date>2013-10-11</Date>

 7         <Adress>上海</Adress>

 8         <Date>2013-10-11</Date>

 9     </Book>

10     <Book>

11         <Name BookName="WCF">WCF入门</Name>

12         <Author Name="Mary">Mary</Author>

13         <Adress>北京</Adress>

14         <Date>2013-10-11</Date>

15     </Book>

16 </BookStore>

以下操作都是对生成的XML树进行操作

2.1 新增节点与属性

新增节点NewBook并增加属性Name="WPF"

          public void Create(string xmlPath)

          {

              XmlDocument xmlDoc = new XmlDocument();

              xmlDoc.Load(xmlPath);

              var root = xmlDoc.DocumentElement;//取到根结点

              XmlNode newNode = xmlDoc.CreateNode("element", "NewBook", "");

              newNode.InnerText = "WPF";

             //添加为根元素的第一层子结点

             root.AppendChild(newNode);

             xmlDoc.Save(xmlPath);

         }

开篇有写操作xml节点属性主要用XmlElement对象所以取到结点后要转类型

          //属性http://c.78name.com

          public void CreateAttribute(string xmlPath)

          {

              XmlDocument xmlDoc = new XmlDocument();

              xmlDoc.Load(xmlPath);

              var root = xmlDoc.DocumentElement;//取到根结点

              XmlElement node = (XmlElement)xmlDoc.SelectSingleNode("BookStore/NewBook");

              node.SetAttribute("Name", "WPF");

              xmlDoc.Save(xmlPath);

         }

效果如下

2.2 删除节点与属性

          public void Delete(string xmlPath)

          {

              XmlDocument xmlDoc = new XmlDocument();

              xmlDoc.Load(xmlPath);

              var root = xmlDoc.DocumentElement;//取到根结点

              var element = xmlDoc.SelectSingleNode("BookStore/NewBook");

              root.RemoveChild(element);

              xmlDoc.Save(xmlPath);

         }

删除属性

          public void DeleteAttribute(string xmlPath)

          {

              XmlDocument xmlDoc = new XmlDocument();

              xmlDoc.Load(xmlPath);

              XmlElement node = (XmlElement)xmlDoc.SelectSingleNode("BookStore/NewBook");

              //移除指定属性

              node.RemoveAttribute("Name");

              //移除当前节点所有属性,不包括默认属性

              //node.RemoveAllAttributes();

             xmlDoc.Save(xmlPath);

         }

2.3 修改节点与属性

xml的节点默认是不允许修改的,本文也就不做处理了

修改属性代码如下

         public void ModifyAttribute(string xmlPath)

         {

             XmlDocument xmlDoc = new XmlDocument();

             xmlDoc.Load(xmlPath);

             XmlElement element = (XmlElement)xmlDoc.SelectSingleNode("BookStore/NewBook");

             element.SetAttribute("Name", "Zhang");

             xmlDoc.Save(xmlPath);

         }

效果如下

2.4 获取节点与属性

          public void Select(string xmlPath)

          {

              XmlDocument xmlDoc = new XmlDocument();

              xmlDoc.Load(xmlPath);

              //取根结点

              var root = xmlDoc.DocumentElement;//取到根结点

              //取指定的单个结点

              XmlNode oldChild = xmlDoc.SelectSingleNode("BookStore/NewBook");

             //取指定的结点的集合

             XmlNodeList nodes = xmlDoc.SelectNodes("BookStore/NewBook");

             //取到所有的xml结点

             XmlNodeList nodelist = xmlDoc.GetElementsByTagName("*");

         }
  

属性

         public void SelectAttribute(string xmlPath)

         {

             XmlDocument xmlDoc = new XmlDocument();

             xmlDoc.Load(xmlPath);

             XmlElement element = (XmlElement)xmlDoc.SelectSingleNode("BookStore/NewBook");

             string name = element.GetAttribute("Name");

             Console.WriteLine(name);

         }

 具体操作 (linq to XML)

Linq to Xml 也没什么变化只操作对象改变了主要涉及的几个对象如下   注:我并没有用linq的语法去操作元素。

XDocument:用于创建一个XML实例文档

XElement:用于一些节点与节点属性的基本操作

以下是对Xml的 一些简单的操作

3.1 新增节点与属性

         public void Create(string xmlPath)

         {

             XDocument xDoc = XDocument.Load(xmlPath);

             XElement xElement = xDoc.Element("BookStore");

             xElement.Add(new XElement("Test", new XAttribute("Name", "Zery")));

             xDoc.Save(xmlPath);

         }

属性

          public void CreateAttribute(string xmlPath)

          {

              XDocument xDoc = XDocument.Load(xmlPath);

              IEnumerable<XElement> xElement = xDoc.Element("BookStore").Elements("Book");

              foreach (var element in xElement)

              {

                  element.SetAttributeValue("Name", "Zery");

              }

              xDoc.Save(xmlPath);

         }

3.2 删除节点与属性

         public void Delete(string xmlPath)

         {

             XDocument xDoc = XDocument.Load(xmlPath);

             XElement element = (XElement)xDoc.Element("BookStore").Element("Book");

             element.Remove();

             xDoc.Save(xmlPath);

         }

属性

         public void DeleteAttribute(string xmlPath)

         {

             XDocument xDoc = XDocument.Load(xmlPath);

             //不能跨级取节点

             XElement element = xDoc.Element("BookStore").Element("Book").Element("Name");

             element.Attribute("BookName").Remove();

             xDoc.Save(xmlPath);

         }

3.3 修改节点属性

节点.net没提供修改的方法本文也不做处理

修改属性与新增实质是同一个方法

         public void ModifyAttribute(string xmlPath)

         {

             XDocument xDoc = XDocument.Load(xmlPath);

             XElement element = xDoc.Element("BookStore").Element("Book");

             element.SetAttributeValue("BookName","ZeryTest");

             xDoc.Save(xmlPath);

         }

 总结

  把文章写完时,又扫去了自己的一个盲区,虽然都是些简单的操作,但在实际的开中,又何尝不是由简单到复杂呢。我觉得身为程序员就应该遇到自己的盲区时,立马花时间去了解,不说要了解多深入,但至少基本的还是要知道,等到工作中真需时,只要稍微花点时间就可以了。

如果觉得文章对你有点帮助,不妨点下推荐,你的推荐让我对写文章能有更多的激情!

成长在于积累!

以上博文转载自:http://wenku.baidu.com/link?url=gBN2W3bUAk-L-IHcBYlawdElPp-3LtW177rXyRwdsOKnYUeVrw_OPcvuvbNYMFib97pfyy1gdTvi7pbdnFoIj5VzT8Ylcdlc5I3keLpkg2q

c# xml操作总结的更多相关文章

  1. LINQ系列:LINQ to XML操作

    LINQ to XML操作XML文件的方法,如创建XML文件.添加新的元素到XML文件中.修改XML文件中的元素.删除XML文件中的元素等. 1. 创建XML文件 string xmlFilePath ...

  2. T-Sql(五)xml操作

    t-sql中的xml操作在我们平时做项目的过程中用的很少,因为我们处理的数据量很少,除非一些用到xml的地方,t-sql中xml操作一般用在数据量很大,性能优化的地方,当然我在平时做项目的时候也是没用 ...

  3. XML格式示例 与 XML操作(读取)类封装

    header('Content-Type: text/xml'); <?xml version="1.0" encoding="utf-8" standa ...

  4. 【Java EE 学习 33 上】【JQuery样式操作】【JQuery中的Ajax操作】【JQuery中的XML操作】

    一.JQuery中样式的操作 1.给id=mover的div采用属性增加样式.one $("#b1").click(function(){ $("#mover" ...

  5. 简单的XML操作类

    /// <summary> /// XmlHelper 的摘要说明. /// xml操作类 /// </summary> public class XmlHelper { pr ...

  6. .net学习笔记---xml操作及读写

    一.XML文件操作中与.Net中对应的类 微软的.NET框架在System.xml命名空间提供了一系列的类用于Dom的实现. 以下给出XML文档的组成部分对应.NET中的类: XML文档组成部分 对应 ...

  7. C#常用操作类库三(XML操作类)

    /// <summary> /// XmlHelper 的摘要说明. /// xml操作类 /// </summary> public class XmlHelper { pr ...

  8. php xml 操作。

    参考 文章:http://www.cnblogs.com/zcy_soft/archive/2011/01/26/1945482.html DOMDocument相关的内容. 属性: Attribut ...

  9. XML Helper XML操作类

    写的一个XML操作类,包括读取/插入/修改/删除. using System;using System.Data;using System.Configuration;using System.Web ...

  10. 我的PHP之旅--XML操作

    XML操作 XML主要是做数据存储和WEB服务的,所以我们难免要操作它,这里只介绍PHP的simpleXML方式. 我们要操作的XML: <?xml version="1.0" ...

随机推荐

  1. crontab与系统时间不一致

    将线上数据库迁移至虚拟机后,运维没有把时间修改. 在后期把时间修改完成后,在数据库上也要修改修改,但是定时任务的备份时间却不在凌晨4点执行,而是在中午12:10分执行. 原因是修改时间后,需要重启cr ...

  2. QT设计UI:QT模式对话框打开文件

    使用QT模式对话框,并使显示框 为背景色: 方法使用了QCheckBox *native;   #include <QCheckBox> 初始化函数代码: //设置默认打开图像位置 nat ...

  3. (转)Bootstrap 之 Metronic 模板的学习之路 - (2)源码分析之 head 部分

    https://segmentfault.com/a/1190000006684122 下面,我们找个目录里面想对较小的文件来分析一下源码结构,我们可以看到,page_general_help.htm ...

  4. Coreldraw软件反盗版提示x8有优惠活动 cdr x8提示盗版怎么办?

    CorelDRAW X8装不上,我的悲伤有这么大,或者比这还大一点...♥♥♥如果你遇到这样的断了网,卸了装,装了卸,然后再安装的...╮(-_-)╭这样的保存和另存为都点不了,不敢关电脑的亦或是这样 ...

  5. " \t\r\n\f"是什么意思

    空格字符 \t 制表符 \r 回车符 \n 换行符 \f 换页符

  6. 复习MySQL④查询功能、连接方式、联合查询

    用select语句查询: select〈目标列组〉 from〈数据源〉 [where〈元组选择条件〉] [group by〈分列组〉[having 〈组选择条件〉]] [order by〈排序列1〉〈 ...

  7. 莫烦大大keras的Mnist手写识别(5)----自编码

    一.步骤: 导入包和读取数据 数据预处理 编码层和解码层的建立 + 构建模型 编译模型 训练模型 测试模型[只用编码层来画图] 二.代码: 1.导入包和读取数据 #导入相关的包 import nump ...

  8. 【剑指Offer】8、跳台阶

      题目描述:   一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果).   解题思路:   首先考虑最简单的情况,如果只有1级台阶, ...

  9. Codeforces Round #406 (Div. 2) 787-D. Legacy

    Rick and his co-workers have made a new radioactive formula and a lot of bad guys are after them. So ...

  10. [IOI2007]矿工配餐

    状态是f[i][a][b][c][d]表示第i个餐车,1号矿洞最近两顿是a,b,2号矿洞最近两顿是c,d. 给的空间是16MB,滚动数组滚动了第一维就行了 (给的变量是char是因为这个不超过256, ...