系列目录

前言#

前一篇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. 基础数据结构之(Binary Trees)

    从头开始刷ACM,真的发现过去的很多漏洞,特别越是基础的数据结构,越应该学习得精,无论是ACM竞赛,研究生考试,还是工程上,对这些基础数据结构的应用都非常多,深刻理解非常必要.不得不说最近感触还是比较 ...

  2. Java层与Jni层的数组传递(转)

    源:Java层与Jni层的数组传递 Android开发中,经常会在Java代码与Jni层之间传递数组(byte[]),一个典型的应用是Java层把需要发送给客户端的数据流传递到Jni层,由Jni层的S ...

  3. 解决word启动时报找不到mathpage.wll错误

    按下面的网址进行操作即可: http://www.mathtype.cn/wenti/word-jianrong.html

  4. jquey插件开发

    1.概述 jquery插件开发的主要方法有三种: 1.通过$.extend()来扩展jQuery,即在jQuery命名空间下扩展属性,直接在$对象下调用,不需要再dom下调用,也无法在dom元素下调用 ...

  5. CCF 201612-1 中间数

    试题编号:201612-1 试题名称:中间数 时间限制:1.0s 内存限制:256.0MB 问题描述 在一个整数序列a1, a2, -, an中,如果存在某个数,大于它的整数数量等于小于它的整数数量, ...

  6. Mongodb 导出json 和csv 格式数据

    导出到json: $ mongoexport.exe  -d TestDB -c TestCollection -o  ./test.json 导出到csv: If you want to outpu ...

  7. oracle系列--级联删除和级联更新

    必须声明:此博客转载于Oracle外键级联删除和级联更新http://www.2cto.com/database/201507/417496.html 鉴于此前收藏的精彩博客无料被删除了,很是痛心,所 ...

  8. jQuery对象插件封装步骤

    jQuery是js的一个非常优秀的库,它大大简化了js的很多操作,并且解决了js的大部分兼容性问题.甚至很多css兼容性问题,用jQuery写都能解决. 这里是对象插件的封装.当然,封装插件很多,这里 ...

  9. 前言(Core Data 应用开发实践指南)

    Core Data 并不是数据库,它其实是一个拥有多种功能的框架.其中,有个功能是把程序与数据库之间的交互过程自动化,不用再编写SQL代码,改用Objective-C对象来实现. Core Data ...

  10. 5分钟了解MySQL5.7的Online DDL雷区

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://suifu.blog.51cto.com/9167728/1855872 Part ...