系列目录

前言#

前一篇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. 神经网络 Neuroph - Java Neural Network Platform Neuroph

    http://neuroph.sourceforge.net/image_recognition.html https://github.com/neuroph/neuroph

  2. (中等) HDU 1495 非常可乐,BFS。

    Description 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享 这一瓶可乐,而且一定要喝的和s ...

  3. 苹果App Store开发者帐户从申请,验证,到发布应用(4)

    苹果App Store应用内支付(In-App Purchase) IAP简介 IAP的全称是In-App Purchase,应用内付费.这种业务模式允许用户免费下载试用,对应用内提供的商品选择消费, ...

  4. Elasticsearch基础教程

    Reference: http://blog.csdn.net/cnweike/article/details/33736429 基础概念 Elasticsearch有几个核心概念.从一开始理解这些概 ...

  5. EF的 JOIN操作

    ef join 用法 var customers = DB.Customer.Join(DB.Commission, cst => cst.CommissionId,               ...

  6. UVa 231 - Testing the CATCHER

    题目大意:一种拦截导弹能拦截多枚导弹,但是它在每次拦截后高度不会再升高,给出导弹的序列,问最多能拦截多少枚导弹? 最长递减子序列问题. #include <cstdio> #include ...

  7. Python collections.defaultdict() 与 dict的使用和区别

    看样子这个文档是难以看懂了.直接看示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import collections s = [('yellow', ...

  8. Struts2的那些小细节

    1.result中传多个参数,&不允许使用需要转义&即多个参数之间用&隔开 <result type="redirectAction">show ...

  9. eclipse中集成svn maven开发手册---合并主干

    如图,代码提交分支之后 右键,项目,切换到主干版本 切换回主干版本后: 更新主干版本 合并 选择merge a range of revisions,点击next 录入要合并的分支版本的路径.此处的s ...

  10. spark transform操作卡死,请先对rdd进行action操作

    这两天一直在写spark程序,遇到了一个奇怪的问题. 问题简单描述如下,有两个RDD,设为rdd_a,rdd_b,当将这两个rdd合并的时候,spark会在运行中卡死. 解决方式也是奇葩. 只要在合并 ...