C#操作XML方法:新增、修改和删除节点与属性
一 前言
先来了解下操作XML所涉及到的几个类及之间的关系 如果大家发现少写了一些常用的方法,麻烦在评论中指出,我一定会补上的!谢谢大家
* 1 XMLElement 主要是针对节点的一些属性进行操作
* 2 XMLDocument 主要是针对节点的CUID操作
* 3 XMLNode 为抽象类,做为以上两类的基类,提供一些操作节点的方法
清楚了以上的关系在操作XML时会更清晰一点
二 具体操作
以下会对Xml的结点与属性做增 删 改 查的操作也满足了实际工作中的大部分情况
先构造一棵XML树如下,其中也涉及到了写入xml文档的操作
1 public void CreatXmlTree(string xmlPath)
2 {
3 XElement xElement = new XElement(
4 new XElement("BookStore",
5 new XElement("Book",
6 new XElement("Name", "C#入门", new XAttribute("BookName", "C#")),
7 new XElement("Author", "Martin", new XAttribute("Name", "Martin")),
8 new XElement("Adress", "上海"),
9 new XElement("Date", DateTime.Now.ToString("yyyy-MM-dd"))
10 ),
11 new XElement("Book",
12 new XElement("Name", "WCF入门", new XAttribute("BookName", "WCF")),
13 new XElement("Author", "Mary", new XAttribute("Name", "Mary")),
14 new XElement("Adress", "北京"),
15 new XElement("Date", DateTime.Now.ToString("yyyy-MM-dd"))
16 )
17 )
18 );
19
20 //需要指定编码格式,否则在读取时会抛:根级别上的数据无效。 第 1 行 位置 1异常
21 XmlWriterSettings settings = new XmlWriterSettings();
22 settings.Encoding = new UTF8Encoding(false);
23 settings.Indent = true;
24 XmlWriter xw = XmlWriter.Create(xmlPath,settings);
25 xElement.Save(xw);
26 //写入文件
27 xw.Flush();
28 xw.Close();
29 }
然后得到如下的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"
1 public void Create(string xmlPath)
2 {
3 XmlDocument xmlDoc = new XmlDocument();
4 xmlDoc.Load(xmlPath);
5
6 var root = xmlDoc.DocumentElement;//取到根结点
7 XmlNode newNode = xmlDoc.CreateNode("element", "NewBook", "");
8 newNode.InnerText = "WPF";
9
10 //添加为根元素的第一层子结点
11 root.AppendChild(newNode);
12 xmlDoc.Save(xmlPath);
13 }
开篇有写操作xml节点属性主要用XmlElement对象所以取到结点后要转类型
1 //属性
2 public void CreateAttribute(string xmlPath)
3 {
4 XmlDocument xmlDoc = new XmlDocument();
5 xmlDoc.Load(xmlPath);
6 var root = xmlDoc.DocumentElement;//取到根结点
7 XmlElement node = (XmlElement)xmlDoc.SelectSingleNode("BookStore/NewBook");
8 node.SetAttribute("Name", "WPF");
9 xmlDoc.Save(xmlPath);
10
11 }
效果如下
2.2 删除节点与属性
1 public void Delete(string xmlPath)
2 {
3 XmlDocument xmlDoc = new XmlDocument();
4 xmlDoc.Load(xmlPath);
5 var root = xmlDoc.DocumentElement;//取到根结点
6
7 var element = xmlDoc.SelectSingleNode("BookStore/NewBook");
8 root.RemoveChild(element);
9 xmlDoc.Save(xmlPath);
10 }
删除属性
1 public void DeleteAttribute(string xmlPath)
2 {
3 XmlDocument xmlDoc = new XmlDocument();
4 xmlDoc.Load(xmlPath);
5 XmlElement node = (XmlElement)xmlDoc.SelectSingleNode("BookStore/NewBook");
6 //移除指定属性
7 node.RemoveAttribute("Name");
8 //移除当前节点所有属性,不包括默认属性
9 //node.RemoveAllAttributes();
10 xmlDoc.Save(xmlPath);
11 }
2.3 修改节点与属性
xml的节点默认是不允许修改的,本文也就不做处理了
修改属性代码如下
1 public void ModifyAttribute(string xmlPath)
2 {
3 XmlDocument xmlDoc = new XmlDocument();
4 xmlDoc.Load(xmlPath);
5 XmlElement element = (XmlElement)xmlDoc.SelectSingleNode("BookStore/NewBook");
6 element.SetAttribute("Name", "Zhang");
7 xmlDoc.Save(xmlPath);
8 }
效果如下
2.4 获取节点与属性
1 public void Select(string xmlPath)
2 {
3 XmlDocument xmlDoc = new XmlDocument();
4 xmlDoc.Load(xmlPath);
5 //取根结点
6 var root = xmlDoc.DocumentElement;//取到根结点
7 //取指定的单个结点
8 XmlNode oldChild = xmlDoc.SelectSingleNode("BookStore/NewBook");
9
10 //取指定的结点的集合
11 XmlNodeList nodes = xmlDoc.SelectNodes("BookStore/NewBook");
12
13 //取到所有的xml结点
14 XmlNodeList nodelist = xmlDoc.GetElementsByTagName("*");
15 }
属性
1 public void SelectAttribute(string xmlPath)
2 {
3 XmlDocument xmlDoc = new XmlDocument();
4 xmlDoc.Load(xmlPath);
5 XmlElement element = (XmlElement)xmlDoc.SelectSingleNode("BookStore/NewBook");
6 string name = element.GetAttribute("Name");
7 Console.WriteLine(name);
8 }
三 linq to XML 操作
Linq to Xml 也没什么变化只操作对象改变了主要涉及的几个对象如下 注:我并没有用linq的语法去操作元素。
XDocument:用于创建一个XML实例文档
XElement:用于一些节点与节点属性的基本操作
以下是对Xml的 一些简单的操作
3.1 新增节点与属性
1 public void Create(string xmlPath)
2 {
3 XDocument xDoc = XDocument.Load(xmlPath);
4 XElement xElement = xDoc.Element("BookStore");
5 xElement.Add(new XElement("Test", new XAttribute("Name", "Zery")));
6 xDoc.Save(xmlPath);
7 }
属性
1 public void CreateAttribute(string xmlPath)
2 {
3 XDocument xDoc = XDocument.Load(xmlPath);
4 IEnumerable<XElement> xElement = xDoc.Element("BookStore").Elements("Book");
5 foreach (var element in xElement)
6 {
7 element.SetAttributeValue("Name", "Zery");
8 }
9 xDoc.Save(xmlPath);
10 }
3.2 删除节点与属性
1 public void Delete(string xmlPath)
2 {
3 XDocument xDoc = XDocument.Load(xmlPath);
4 XElement element = (XElement)xDoc.Element("BookStore").Element("Book");
5 element.Remove();
6 xDoc.Save(xmlPath);
7 }
属性
1 public void DeleteAttribute(string xmlPath)
2 {
3 XDocument xDoc = XDocument.Load(xmlPath);
4 //不能跨级取节点
5 XElement element = xDoc.Element("BookStore").Element("Book").Element("Name");
6 element.Attribute("BookName").Remove();
7 xDoc.Save(xmlPath);
8 }
3.3 修改节点属性
节点.net没提供修改的方法本文也不做处理
修改属性与新增实质是同一个方法
1 public void ModifyAttribute(string xmlPath)
2 {
3 XDocument xDoc = XDocument.Load(xmlPath);
4 XElement element = xDoc.Element("BookStore").Element("Book");
5 element.SetAttributeValue("BookName","ZeryTest");
6 xDoc.Save(xmlPath);
7 }
四 总结
把文章写完时,又扫去了自己的一个盲区,虽然都是些简单的操作,但在实际的开中,又何尝不是由简单到复杂呢。我觉得身为程序员就应该遇到自己的盲区时,立马花时间去了解,不说要了解多深入,但至少基本的还是要知道,等到工作中真需时,只要稍微花点时间就可以了。
C#操作XML方法:新增、修改和删除节点与属性的更多相关文章
- .net操作xml文件(新增.修改,删除,读取) 转
今天有个需求需要操作xml节点.突然见遗忘了许多.上网看了些资料.才整出来.脑袋真不够用.在这里把我找到的资料共享一下.方便以后使用.本文属于网摘/ 1 一.简单介绍2 using System.Xm ...
- .net操作xml文件(新增.修改,删除,读取)---datagridview与xml文件
参考网址: http://www.cnblogs.com/liguanghui/archive/2011/11/10/2244199.html 很详细的,相信能给你一定的帮助.
- C#操作XML方法集合
一 前言 先来了解下操作XML所涉及到的几个类及之间的关系 如果大家发现少写了一些常用的方法,麻烦在评论中指出,我一定会补上的!谢谢大家 * 1 XMLElement 主要是针对节点的一些属性进行操 ...
- 摘:通过ICursor对Table进行操作(添加、修改、删除)
通过ICursor对Table进行操作(添加.修改.删除) 连接上数据表的目的就是对其进行包括浏览.添加.修改.删除等基本操作. 浏览功能,之前文章中一提到,就是将Itable转换为DataTable ...
- 通过ICursor对Table进行操作(添加、修改、删除)
通过ICursor对Table进行操作(添加.修改.删除) 2010-03-16 16:07:37| 分类: 工作|举报|字号 订阅 来自:http://blog.163.com/liuyang12 ...
- JS 对象API之修改、删除对象的属性
无论是修改还是删除对象的属性,我们首先要清楚:自有属性.共有属性的处理方法肯定是不同的: 先创建一个对象实例 var obj = { name: '小马扎', age: }; Object.proto ...
- C#操作XML方法详解
using System.Xml; //初始化一个xml实例 XmlDocument xml=new XmlDocument(); //导入指定xml文件 xml.Load(path); xml. ...
- PHP操作XML方法之SimpleXML
SimpleXML简介 SimpleXML 扩展提供了一个非常简单和易于使用的工具集,能将XML转换成一个带有一般属性选择器和数组迭代器的对象. 举例XML XML结构部分引用自<<深入理 ...
- C#.Net操作XML方法二
上面那篇博客,在上面那面博客中是通过System.Xml命名空间中的类来实现对XML文件的创建.删除和改动等操作.接下来再介绍一种方法,在整个的操作过程中,仅仅只是换了个类而已,没什么大惊小怪的. D ...
随机推荐
- LINUX CP命令直接覆盖不提示按Y/N的方法
refer to: https://blog.csdn.net/qq_36741436/article/details/78732201 cp覆盖时,无论加什么参数-f之类的还是提示是否覆盖,当文件比 ...
- Network | HTTP protocol
版本 HTTP/1.0这是第一个在通讯中指定版本号的HTTP协议版本,至今仍被广泛采用,特别是在代理服务器中. HTTP/1.1当前版本.持久连接被默认采用,并能很好地配合代理服务器工作.还支持以管道 ...
- SQLite复杂表的更新方式
SQLite复杂表的更新方式 在SQLite中,如果早期设计的表无法满足需要,就需要对表进行更新,如修改名字.添加列.如果针对简单表,修改起来相对容易,直接使用提供的ALTER命令即可.但是如果该 ...
- POJ 3373 Changing Digits 记忆化搜索
这道题我是看了别人的题解才做出来的.题意和题解分析见原文http://blog.csdn.net/lyy289065406/article/details/6698787 这里写一下自己对题目的理解. ...
- Apache Openwhisk学习(一)
一.背景 最近中途参与的一个项目是和Serverless.Faas相关的,项目的整体架构和实现都参考了开源项目openwhisk,因此,同事们在编码时都会参考openwhisk的源码.因为以前从没有接 ...
- Mysql乱码问题解决历程
可能是因为看了太多网上的关于这个问题的解决办法,可能当时是我自己没有看明白也或许是情况不一样,反正都没有解决我当初遇到的问题,现在想想可能是自己当初太无知了,第二个原因是原来大多数情况下是在windo ...
- 快速建立ssh互信(转)
转自:魏巍的Linux酒吧 - 51CTO技术博客(http://weiweilinux.blog.51cto.com/3349074/1048212) 快速建立ssh互信 因为工作中经常需要配置服务 ...
- xamarin.ios 半圆角按钮Readerer
xamarin.from上可以使用本身的button实现圆角带图标的按钮,但是没有半圆角的按钮实现,需要自己使用Renderer重新写过来重写一个button. 下面是一个重写的带边框的方式,代码如下 ...
- PHP设置头部编码为UTF-8语句
header("Content-type: text/html; charset=utf-8");
- 2016.7.12 错误:syntax error at or near “(”
错误提示: 错误原因:漏了个,号.