系列目录

前言#

前一篇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. (简单) POJ 2406 Power Strings,扩展KMP。

    Description Given two strings a and b we define a*b to be their concatenation. For example, if a = & ...

  2. sublime text 我的常用配置

    { "color_scheme": "Packages/Color Scheme - Default/IDLE.tmTheme", "font_fac ...

  3. java web系统优化, mysql查询优化

    1. 采用数据库连接池技术 2. 优化sql语句格式, 比如用PreparedStatement代替Statement, 前者避免重复编译, 后者每次都需要对数据库进行解析编译, 降低数据库的访问效率 ...

  4. 在阿里云ECS(CentOS6.5)上安装mysql

    首先查看服务器上是否已经安装过mysql 命令: rpm -qa | grep mysql 结果: 可以看到ECS上已经有mysql-libs这个包了.这并不影响安装. 查看yum服务器上提供的mys ...

  5. UIImageView控件

    UIImageView是用于显示图像的,在iOS开发中,我们无需专门去写什么代码,不需要检查设备的类型,只需要把1x.2x.3x的图像添加到项目中,图像视图会自动的在正确的时间加载正确的图像. (1) ...

  6. 歪国人DIY的MINI四轴

    歪国人DIY的MINI四轴 Crazyflie 2.0 自己仿Crazyflie.CrazyPony

  7. 菊花加载第三方--MBprogressHUD

    上次说到了网络请求AFN,那么我们在网络请求的时候,等待期间,为了让用户不认为是卡死或程序出错,一般都会放一个菊花加载,系统有一个菊花加载类叫UIProgressHUD.但是我今天要说的是一个替代它的 ...

  8. js中的 substring和substr方法

    原文: http://www.cnblogs.com/chinafine/archive/2009/02/26/1398771.html 1.substring 方法 定义和用法 substring ...

  9. ASP.NET脚本过滤-防止跨站脚本攻击[转]

    ASP.Net 1.1后引入了对提交表单自动检查是否存在XSS(跨站脚本攻击)的能力.当用户试图用<xxxx>之类的输入影响页面返回结果的时候,ASP.Net的引擎会引发一个HttpReq ...

  10. 解决eclipse报PermGen space异常的问题

    开发中遇到Eclipse报错:java.lang.OutOfMemoryError: PermGen space. 网搜到三种解决方法,最终还是第三种方法起了作用.记录日志,备用. 原文地址: htt ...