c# xml操作总结
一前言
先来了解下操作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); }
四总结
把文章写完时,又扫去了自己的一个盲区,虽然都是些简单的操作,但在实际的开中,又何尝不是由简单到复杂呢。我觉得身为程序员就应该遇到自己的盲区时,立马花时间去了解,不说要了解多深入,但至少基本的还是要知道,等到工作中真需时,只要稍微花点时间就可以了。
如果觉得文章对你有点帮助,不妨点下推荐,你的推荐让我对写文章能有更多的激情!
成长在于积累!
c# xml操作总结的更多相关文章
- LINQ系列:LINQ to XML操作
LINQ to XML操作XML文件的方法,如创建XML文件.添加新的元素到XML文件中.修改XML文件中的元素.删除XML文件中的元素等. 1. 创建XML文件 string xmlFilePath ...
- T-Sql(五)xml操作
t-sql中的xml操作在我们平时做项目的过程中用的很少,因为我们处理的数据量很少,除非一些用到xml的地方,t-sql中xml操作一般用在数据量很大,性能优化的地方,当然我在平时做项目的时候也是没用 ...
- XML格式示例 与 XML操作(读取)类封装
header('Content-Type: text/xml'); <?xml version="1.0" encoding="utf-8" standa ...
- 【Java EE 学习 33 上】【JQuery样式操作】【JQuery中的Ajax操作】【JQuery中的XML操作】
一.JQuery中样式的操作 1.给id=mover的div采用属性增加样式.one $("#b1").click(function(){ $("#mover" ...
- 简单的XML操作类
/// <summary> /// XmlHelper 的摘要说明. /// xml操作类 /// </summary> public class XmlHelper { pr ...
- .net学习笔记---xml操作及读写
一.XML文件操作中与.Net中对应的类 微软的.NET框架在System.xml命名空间提供了一系列的类用于Dom的实现. 以下给出XML文档的组成部分对应.NET中的类: XML文档组成部分 对应 ...
- C#常用操作类库三(XML操作类)
/// <summary> /// XmlHelper 的摘要说明. /// xml操作类 /// </summary> public class XmlHelper { pr ...
- php xml 操作。
参考 文章:http://www.cnblogs.com/zcy_soft/archive/2011/01/26/1945482.html DOMDocument相关的内容. 属性: Attribut ...
- XML Helper XML操作类
写的一个XML操作类,包括读取/插入/修改/删除. using System;using System.Data;using System.Configuration;using System.Web ...
- 我的PHP之旅--XML操作
XML操作 XML主要是做数据存储和WEB服务的,所以我们难免要操作它,这里只介绍PHP的simpleXML方式. 我们要操作的XML: <?xml version="1.0" ...
随机推荐
- Burn Down Chart(2018.5.28~2018.6.3)
任务安排 (2018.6.2 更新——前端总进度) (2018.6.3 更新——后端燃尽图) 娄雨禛[前端部分] 曾子轩[后端部分+燃尽图] 前端 齐天扬+刘鼎乾:设计两组页面,只要求框架和简单的 c ...
- div 背景放图和直接放图区别
<html> <head> <meta charset="UTF-8"> <title></title> <sty ...
- Deutsch lernen (12)
1. hinweisen - wies hin - hingewiesen 向...指出,指明 auf etw.(A) hinweisen Ich möchte (Sie) darauf hiweis ...
- Deutsch lernen (11)
1. anwesend a. 出席的,在场的 ~ abwesend Es waren gegen 50 Leute anwesend. 2. gespannt a. (心情)急切的,急于想知道的:紧张 ...
- Embedded之Stack之一
1 Intro When a program starts executing, a certain contiguous section of memory is set aside for the ...
- Matlab移植到Eigen用到的词条
同型矩阵运算满足加法交换律.结合律:并存在单位元.逆元.和0元,为同型矩阵对加法的交换环. Eigen的简单运算参考:http://blog.163.com/jiaqiang_wang/blog/st ...
- js对cookie增删改查的封装
/** * 获取cookie * @param name * @returns {*} */ function getCookie(name) { var cookieArr = document.c ...
- 【转载】Jsp页面传Json数据到服务端,转对象或集合进行数据处理
需求:1.将页面数据带到服务端并转成对象,2.将页面的集合数据带到服务端转List实现:用ajax请求传递数据,数据格式为json JS方法: testJsonMethod = function(){ ...
- win10下一分钟快速搭建rtmp推流服务器
为了让大家少踩笔者踩过的坑,目前将工作中搭建rtmp推流服务器的步骤总结如下: 步骤1: 下载 nginx 1.7.11.3 Gryphon 下载链接: http://nginx-win.ecsds. ...
- 02-Linux命令基础-第02天(压缩包管理、服务器搭建与使用、vim)
01- 复习 /boot 目录 引导项 八种文件类型: 文件:- 目录:d 软链接:l 字符设备文件:c 块设备文件:b 管道:p 套接字:s 未知 cp –a 保持源文件属性(如时间属性 如果不 ...