系列目录

前言#

前一篇XML读取,现在咱们继续XML操作相关

C#中也有三种操作(增、删、改、查)XML文件方法如下:

  1. 使用 XmlDocument(DOM模式)
  2. 使用 XmlTextWriter(流模式)
  3. 使用 Linq to Xml(Linq模式)

使用XmlDocument方式操作#

增加节点##

向文件中添加新的数据的时候,首先也是通过XmlDocument加载整个文档,然后通过调用SelectSingleNode方法获得根结点,通过CreateElement方法创建元素,用CreateAttribute创建属性,用AppendChild把当前结点挂接在其它结点上,用SetAttributeNode设置结点的属性.具体代码如下:

#region XmlDocument创建或者插入节点

/// <summary>
/// 向文件中添加新的数据的时候,
/// 首先也是通过XmlDocument加载整个文档,
/// 然后通过调用SelectSingleNode方法获得根结点,
/// 通过CreateElement方法创建元素,
/// 用CreateAttribute创建属性,
/// 用AppendChild把当前结点挂接在其它结点上,
/// 用SetAttributeNode设置结点的属性.具体代码如下:
/// </summary>
public static void XmlDocumentCreateInsertDemo()
{
//加载文件并选出要结点:
XmlDocument doc = new XmlDocument();
doc.Load(@"d:/demo.xml");
XmlNode root = doc.SelectSingleNode("bookstore");
//创建一个结点,并设置结点的属性:
XmlElement xelKey = doc.CreateElement("test");
XmlAttribute xelType = doc.CreateAttribute("Type");
xelType.Value = "testvalue";
xelKey.SetAttribute("Type", "testvalue2");
xelKey.SetAttributeNode(xelType);
//注释节点
XmlComment xco = doc.CreateComment("这是注释");
//内容节点
XmlElement xelAuthor = doc.CreateElement("author");
xelAuthor.InnerText = "sss";
xelKey.AppendChild(xelAuthor);
xelKey.AppendChild(xco);
root.AppendChild(xelKey);
doc.Save(@"d:/demov2.xml");
} #endregion XmlDocument创建或者插入节点

删除、修改##

想要删除某一个结点,直接找到其父结点,然后调用RemoveChild方法即可,现在关键的问题是如何找到这个结点,上面的SelectSingleNode可以传入一个Xpath表,我们通过书的ISBN号来找到这本书所在的结点

修改某 条数据的话,首先也是用Xpath表达式找到所需要修改的那一个结点,然后如果是元素的话,就直接对这个元素赋值,如果是属性的话,就用SetAttribute方法设置即可

#region XmlDocument 查找删除修改

/// <summary>
/// 想要删除某一个结点,直接找到其父结点,
/// 然后调用RemoveChild方法即可,现在关键的问题是如何找到这个结点,
/// 上面的SelectSingleNode可以传入一个Xpath表,
/// 我们通过书的ISBN号来找到这本书所在的结点
/// </summary>
public static void XmlDocumentSeachDelUpdateDemo()
{
XmlDocument doc = new XmlDocument();
doc.Load(@"d:/demo.xml");
XmlNode root = doc.DocumentElement;
string strPath = string.Format("/bookstore/book[@ISBN=\"{0}\"]", "7-111-19149-6");
XmlElement selectXe = (XmlElement)root.SelectSingleNode(strPath);
//删除
//selectXe.ParentNode.RemoveChild(selectXe);
selectXe.SetAttribute("Type", "asdfasdf");//也可以通过SetAttribute来增加一个属性
selectXe.SetAttribute("Typeasdf", "wxcd");//也可以通过SetAttribute来增加一个属性
selectXe.GetElementsByTagName("title").Item(0).InnerText = "33ee";
XmlElement appxle = doc.CreateElement("windy");
appxle.InnerText = "wwws";
selectXe.AppendChild(appxle);
doc.Save(@"d:/demod.xml");
} #endregion XmlDocument 查找删除修改

"/bookstore/book[@ISBN="{0}"]"是一个Xpath表达式,找到ISBN号为所选那一行ISBN号的那本书,有关Xpath的知识请参考:XPath 语法

使用XmlTextWriter方式操作#

XmlTextWriter写文件的时候,默认是覆盖以前的文件,如果此文件名不存在,它将创建此文件.首先设置一下,你要创建的XML文件格式.

   1: XmlTextWriter myXmlTextWriter = new XmlTextWriter(@"..\..\Book1.xml", null);
2: //使用 Formatting 属性指定希望将 XML 设定为何种格式。 这样,子元素就可以通过使用 Indentation 和 IndentChar 属性来缩进。
3: myXmlTextWriter.Formatting = Formatting.Indented;

然后可以通过WriteStartElement和WriteElementString方法来创建元素,这两者的区别就是如果有子结点的元素,那么创建的时候就用WriteStartElement,然后去创建子元素,创建完毕后,要调用相应的WriteEndElement来告诉编译器,创建完毕,用WriteElementString来创建单个的元素,用WriteAttributeString来创建属性.如下:

#region XmlTextWriterDemo

/// <summary>
/// 然后可以通过WriteStartElement和WriteElementString方法来创建元素,
/// 这两者的区别就是如果有子结点的元素,那么创建的时候就用WriteStartElement,
/// 然后去创建子元素,创建完毕后,要调用相应的WriteEndElement来告诉编译器,创建完毕,
/// 用WriteElementString来创建单个的元素,用WriteAttributeString来创建属性
/// </summary>
public static void XmlTextWriterDemo()
{
XmlTextWriter myXmlTextWriter = new XmlTextWriter(@"d:/demoWriter.xml", null);
//使用 Formatting 属性指定希望将 XML 设定为何种格式。 这样,子元素就可以通过使用 Indentation 和 IndentChar 属性来缩进。
myXmlTextWriter.Formatting = Formatting.Indented;
myXmlTextWriter.WriteStartDocument(true);
myXmlTextWriter.WriteStartElement("root");
myXmlTextWriter.WriteComment("我测试XML编写");
myXmlTextWriter.WriteStartElement("person");
myXmlTextWriter.WriteAttributeString("name", "windy");
myXmlTextWriter.WriteAttributeString("age", "20");
myXmlTextWriter.WriteElementString("city", "wuxi");
myXmlTextWriter.WriteEndElement();
myXmlTextWriter.WriteEndElement();
myXmlTextWriter.Flush();
myXmlTextWriter.Close();
} #endregion XmlTextWriterDemo

使用Linq to Xml方式操作#

插入一条数据##

#region 插入一条数据

XElement xe = XElement.Load(@"d:/demoLinq.xml");
XElement record = new XElement(
new XElement("root",
new XElement("book",
new XAttribute("Type", "选修课"),
new XAttribute("ISBN", "7-111-19149-1"),
new XElement("title", "计算机操作系统"),
new XElement("author", "7-111-19149-1"),
new XElement("price", 28.00))));
xe.Add(record);
record.Save(@"d:/demoLinq.xml"); #endregion 插入一条数据

修改某一记录##

#region 修改某一记录

//注意:xml必须需要根节点
XElement xe = XElement.Load(@"d:/demoLinq.xml");
string id = "7-111-19149-1";
var elements = from ele in xe.Elements()
where (string)ele.Attribute("ISBN") == id
select ele;
if (elements.Count() > 0)
{
XElement first = elements.First();
///设置新的属性
first.SetAttributeValue("Type", "11212");
///替换新的节点
first.ReplaceNodes(
new XElement("title", "3435"),
new XElement("author", "55656"),
new XElement("price", "9999")
);
}
xe.Save(@"d:/demoLinq.xml"); #endregion 修改某一记录

删除##

#region 删除选中的数据

XElement xe = XElement.Load(@"d:/demoLinq.xml");
string id = "";
var elements = from ele in xe.Elements("book")
where (string)ele.Attribute("ISBN") == id
select ele;
if (elements.Count() > 0)
{
elements.First().Remove();
}
xe.Save(@"d:/demoLinq.xml"); #endregion 删除选中的数据 #region 修改某一记录

C#操作XML方式的更多相关文章

  1. java操作xml方式比较与详解(DOM、SAX、JDOM、DOM4J)

    java中四种操作(DOM.SAX.JDOM.DOM4J)xml方式的比较与详解     1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准. ...

  2. java中四种操作xml方式的比较

    1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息. ...

  3. android操作XML的几种方式(转)

    XML作为一种业界公认的数据交换格式,在各个平台与语言之上,都有广泛使用和实现.其标准型,可靠性,安全性......毋庸置疑.在android平台上,我们要想实现数据存储和数据交换,经常会使用到xml ...

  4. 操作xml文档的常用方式

    1.操作XML文档的两种常用方式: 1)使用XmlReader类和XmlWriter类操作 XmlReader是基于数据流的,占用极少的内存,是只读方式的,所以速度极快.只能采用遍历的模式查找数据节点 ...

  5. C#操作xml的3种方式

    C#操作Xml有很多种方式,这里写出个人常使用的三种方式 XmlDocument DataSet linq to xml  首先声明本次操作使用的xml文件:books.xml:内容如下 <?x ...

  6. 【AOP】操作相关术语---【Spring】的【AOP】操作(基于aspectj的xml方式)

    [AOP]操作相关术语 Joinpoint(连接点):类里面哪些方法可以被增强,这些方法称为连接点. Pointcut(切入点):在类里面可以有很多的方法被增强,比如实际操作中,只是增强了类里面add ...

  7. Asp.Net 操作XML文件的增删改查 利用GridView

    不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...

  8. JavaScript操作XML

    JavaScript操作XML (一) JavaScript操作XML是通过XML DOM来完成的.那么什么是XML DOM呢?XML DOM 是: 用于 XML 的标准对象模型 用于 XML 的标准 ...

  9. Delphi操作XML简介

    参考:http://www.delphifans.com/InfoView/Article_850.html Delphi 7支持对XML文档的操作,可以通过 TXMLDocument类来实现对XML ...

随机推荐

  1. chart.js在html中画曲线图

    http://www.bootcss.com/p/chart.js/docs/ http://www.chartjs.org/docs/   中有详细讲解 一.简介 Chart.js是一个基于HTML ...

  2. 学习c++语言应该牢记的50条准则,同样学习其他语言也一样

    1.把C++当成一门新的语言学习(和C没啥关系!真的.): 2.看<Thinking In C++>,不要看<C++变成死相>: 3.看<The C++ Programm ...

  3. STM32驱动DHT11温湿度传感器

    DHT11 是一款湿温度一体化的数字传感器.该传感器包括一个电阻式测湿元件和一个 NTC 测温元件,并与一个高性能 8 位单片机相连接.通过单片机等微处理器简单的电路连接就能够 实时的采集本地湿度和温 ...

  4. UVa 532 - Dungeon Master

    题目大意:给一个三维迷宫,给出入口和出口,找出最短路径. 无权图上的单源最短路问题,使用BFS解决. #include <cstdio> #include <queue> #i ...

  5. Python3基础 使用 in notin 查询一个字符是否指定字典的键或者值

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  6. hibernate-Maven

    1.创建Maven 2.创建Maven工程 3.然后一直下一步 4.创建成功后Maven 5.下载jra包 //hibernate <dependencies> <dependenc ...

  7. 用编程的方式定义UI界面

    package com.example.administrator.test_hello_world; import android.app.Activity; import android.os.B ...

  8. IM 之 融云

    官方网站:http://www.rongcloud.cn 官方开发文档:http://www.rongcloud.cn/docs/ IM 融云 之 开发基础概念 IM 融云 之 通讯能力库API IM ...

  9. 在centos 6.5 x64中安装 spark-1.5.1

    以下内容参考:http://blog.csdn.net/lovehuangjiaju/article/details/48494737 1.解压安装文件,设置环境变量 这里我们使用的安装文件是已经编译 ...

  10. YII 1.0 (7) 登录信息调取 session使用

    登陆信息调取 Yii::app()->user->name,调取登陆的session信息 登录时 调用了 $LoginForm->login() 这个方法上面就能够取到登录的用户名 ...