XML:Extensible Markup Language(可扩展标记语言)的缩写,是用来定义其它语言的一种元语言,其前身是SGML(Standard Generalized 
Markup Language,标准通用标记语言)。它没有标签集(tag set),也没有语法规则(grammatical rule),但是它有句法规则(syntax rule)。
任何XML文档对任何类型的应用以及正确的解析都必须是良构的(well-formed),即每一个打开的标签都必须有匹配的结束标签,不得
含有次序颠倒的标签,并且在语句构成上应符合技术规范的要求。XML文档可以是有效的(valid),但并非一定要求有效。所谓有效文档是指其符合其文档
类型定义(DTD)的文档。如果一个文档符合一个模式(schema)的规定,那么这个文档是"模式有效的(schema valid)"。
  XML文件在存储、交换和传输数据信息上有着很方便处理,那么今天这篇文章主要讲一下用C#如何实现对XML文件的基本操作,
如:创建xml文件,增、删、改、查xml的节点信息。所使用的方法很基础,方便易懂(用于自己的学习和记忆只需,同时也希望能够给你带来一些帮助,
如有不合适的地方欢迎大家批评指正)。
  本文的主要模块为:
    ① :生成xml文件
    ② :遍历xml文件的节点信息
    ③ :修改xml文件的节点信息
    ④ :向xml文件添加节点信息
    ⑤ :删除指定xml文件的节点信息
  • 假设我们需要设计出这样的一个xml文件来存储相应的信息,如下所示:
<Computers>
<Computer ID="11111111" Description="Made in China">
<name>Lenovo</name>
<price>5000</price>
</Computer>
<Computer ID="2222222" Description="Made in USA">
<name>IBM</name>
<price>10000</price>
</Computer>
</Computers>   那么如何生成这个xml文件?又怎么读取这个xml文件的节点信息,以及如何对这个xml文件的节点信息作相应的操作?请看如下代码示例:
  【注:因为我们要使用xml相关的语法和方法,所以一定要引入命名空间 System.Xml】
1 using System;
2  using System.Collections.Generic;
3  using System.Linq;
4  using System.Text;
5  using System.Xml;
6
7  namespace OperateXML
8 {
9 class Program
10 {
11 staticvoid Main(string[] args)
12 {
13 try
14 {
15 //xml文件存储路径
16 string myXMLFilePath ="E:\\MyComputers.xml";
17 //生成xml文件
18 GenerateXMLFile(myXMLFilePath);
19 //遍历xml文件的信息
20 GetXMLInformation(myXMLFilePath);
21 //修改xml文件的信息
22 ModifyXmlInformation(myXMLFilePath);
23 //向xml文件添加节点信息
24 AddXmlInformation(myXMLFilePath);
25 //删除指定节点信息
26 DeleteXmlInformation(myXMLFilePath);
27 }
28 catch (Exception ex)
29 {
30 Console.WriteLine(ex.ToString());
31 }
32 }
33
34 privatestaticvoid GenerateXMLFile(string xmlFilePath)
35 {
36 try
37 {
38 //初始化一个xml实例
39 XmlDocument myXmlDoc =new XmlDocument();
40 //创建xml的根节点
41 XmlElement rootElement = myXmlDoc.CreateElement("Computers");
42 //将根节点加入到xml文件中(AppendChild)
43 myXmlDoc.AppendChild(rootElement);
44
45 //初始化第一层的第一个子节点
46 XmlElement firstLevelElement1 = myXmlDoc.CreateElement("Computer");
47 //填充第一层的第一个子节点的属性值(SetAttribute)
48 firstLevelElement1.SetAttribute("ID", "11111111");
49 firstLevelElement1.SetAttribute("Description", "Made in China");
50 //将第一层的第一个子节点加入到根节点下
51 rootElement.AppendChild(firstLevelElement1);
52 //初始化第二层的第一个子节点
53 XmlElement secondLevelElement11 = myXmlDoc.CreateElement("name");
54 //填充第二层的第一个子节点的值(InnerText)
55 secondLevelElement11.InnerText ="Lenovo";
56 firstLevelElement1.AppendChild(secondLevelElement11);
57 XmlElement secondLevelElement12 = myXmlDoc.CreateElement("price");
58 secondLevelElement12.InnerText ="5000";
59 firstLevelElement1.AppendChild(secondLevelElement12);
60
61
62 XmlElement firstLevelElement2 = myXmlDoc.CreateElement("Computer");
63 firstLevelElement2.SetAttribute("ID", "2222222");
64 firstLevelElement2.SetAttribute("Description", "Made in USA");
65 rootElement.AppendChild(firstLevelElement2);
66 XmlElement secondLevelElement21 = myXmlDoc.CreateElement("name");
67 secondLevelElement21.InnerText ="IBM";
68 firstLevelElement2.AppendChild(secondLevelElement21);
69 XmlElement secondLevelElement22 = myXmlDoc.CreateElement("price");
70 secondLevelElement22.InnerText ="10000";
71 firstLevelElement2.AppendChild(secondLevelElement22);
72
73 //将xml文件保存到指定的路径下
74 myXmlDoc.Save(xmlFilePath);
75 }
76 catch (Exception ex)
77 {
78 Console.WriteLine(ex.ToString());
79 }
80 }
81
82 privatestaticvoid GetXMLInformation(string xmlFilePath)
83 {
84 try
85 {
86 //初始化一个xml实例
87 XmlDocument myXmlDoc =new XmlDocument();
88 //加载xml文件(参数为xml文件的路径)
89 myXmlDoc.Load(xmlFilePath);
90 //获得第一个姓名匹配的节点(SelectSingleNode):此xml文件的根节点
91 XmlNode rootNode = myXmlDoc.SelectSingleNode("Computers");
92 //分别获得该节点的InnerXml和OuterXml信息
93 string innerXmlInfo = rootNode.InnerXml.ToString();
94 string outerXmlInfo = rootNode.OuterXml.ToString();
95 //获得该节点的子节点(即:该节点的第一层子节点)
96 XmlNodeList firstLevelNodeList = rootNode.ChildNodes;
97 foreach (XmlNode node in firstLevelNodeList)
98 {
99 //获得该节点的属性集合
100 XmlAttributeCollection attributeCol = node.Attributes;
101 foreach (XmlAttribute attri in attributeCol)
102 {
103 //获取属性名称与属性值
104 string name = attri.Name;
105 string value = attri.Value;
106 Console.WriteLine("{0} = {1}", name, value);
107 }
108
109 //判断此节点是否还有子节点
110 if (node.HasChildNodes)
111 {
112 //获取该节点的第一个子节点
113 XmlNode secondLevelNode1 = node.FirstChild;
114 //获取该节点的名字
115 string name = secondLevelNode1.Name;
116 //获取该节点的值(即:InnerText)
117 string innerText = secondLevelNode1.InnerText;
118 Console.WriteLine("{0} = {1}", name, innerText);
119
120 //获取该节点的第二个子节点(用数组下标获取)
121 XmlNode secondLevelNode2 = node.ChildNodes[1];
122 name = secondLevelNode2.Name;
123 innerText = secondLevelNode2.InnerText;
124 Console.WriteLine("{0} = {1}", name, innerText);
125 }
126 }
127 }
128 catch (Exception ex)
129 {
130 Console.WriteLine(ex.ToString());
131 }
132 }
133
134 privatestaticvoid ModifyXmlInformation(string xmlFilePath)
135 {
136 try
137 {
138 XmlDocument myXmlDoc =new XmlDocument();
139 myXmlDoc.Load(xmlFilePath);
140 XmlNode rootNode = myXmlDoc.FirstChild;
141 XmlNodeList firstLevelNodeList = rootNode.ChildNodes;
142 foreach (XmlNode node in firstLevelNodeList)
143 {
144 //修改此节点的属性值
145 if (node.Attributes["Description"].Value.Equals("Made in USA"))
146 {
147 node.Attributes["Description"].Value ="Made in HongKong";
148 }
149 }
150 //要想使对xml文件所做的修改生效,必须执行以下Save方法
151 myXmlDoc.Save(xmlFilePath);
152 }
153 catch (Exception ex)
154 {
155 Console.WriteLine(ex.ToString());
156 }
157
158 }
159
160 privatestaticvoid AddXmlInformation(string xmlFilePath)
161 {
162 try
163 {
164 XmlDocument myXmlDoc =new XmlDocument();
165 myXmlDoc.Load(xmlFilePath);
166 //添加一个带有属性的节点信息
167 foreach (XmlNode node in myXmlDoc.FirstChild.ChildNodes)
168 {
169 XmlElement newElement = myXmlDoc.CreateElement("color");
170 newElement.InnerText ="black";
171 newElement.SetAttribute("IsMixed", "Yes");
172 node.AppendChild(newElement);
173 }
174 //保存更改
175 myXmlDoc.Save(xmlFilePath);
176 }
177 catch (Exception ex)
178 {
179 Console.WriteLine(ex.ToString());
180 }
181 }
182
183 privatestaticvoid DeleteXmlInformation(string xmlFilePath)
184 {
185 try
186 {
187 XmlDocument myXmlDoc =new XmlDocument();
188 myXmlDoc.Load(xmlFilePath);
189 foreach (XmlNode node in myXmlDoc.FirstChild.ChildNodes)
190 {
191 //记录该节点下的最后一个子节点(简称:最后子节点)
192 XmlNode lastNode = node.LastChild;
193 //删除最后子节点下的左右子节点
194 lastNode.RemoveAll();
195 //删除最后子节点
196 node.RemoveChild(lastNode);
197 }
198 //保存对xml文件所做的修改
199 myXmlDoc.Save(xmlFilePath);
200 }
201 catch (Exception ex)
202 {
203 Console.WriteLine(ex.ToString());
204 }
205 }
206 }
207 }
208
上面的这个例子,首先是通过GenerateXMLFile方法在E盘创建出了我们预想的xml文件;然后通过GetXMLInformation方法对刚刚生成的xml文件进行了信息的读取;
之后通过ModifyXmlInformation方法对xml文件信息作出相应的修改(<Computer ID="2222222" Description="Made in USA">
修改成为<Computer ID="2222222" Description="Made in HongKong">);再之后通过AddXmlInformation方法向xml文件中添加了一个带有属性值的color节点;
最后通过DeleteXmlInformation方法将刚刚添加上的color节点删除掉。至此完成了对xml文件的基本操作:创建、读取、修改、添加、删除。
【注1:想要将对xml文件所做的任何修改生效的话,必须调用Save方法,否则我们所做的修改不会保存】
【注2:我们在创建节点的时候用的是XmlElement,但是读取节点信息的时候却用的是XmlNode,这里强调一点:XmlElement是XmlNode的继承,可以调用更多的方法
    实现相应所需的功能】
  
  最后简单集中的总结一下对xml进行操作的基本方法,如下所示:
    //所需要添加的命名空间
    using System.Xml;
    //初始化一个xml实例
    XmlDocument xml=new XmlDocument();     //导入指定xml文件
    xml.Load(“xml文件路径path”);     //指定一个节点
    XmlNode root=xml.SelectSingleNode("节点名称");     //获取节点下所有直接子节点
    XmlNodeList childlist=root.ChildNodes;     //判断该节点下是否有子节点
    root.HasChildNodes;     //获取同名同级节点集合
    XmlNodeList nodelist=xml.SelectNodes("节点名称");     //生成一个新节点
    XmlElement node=xml.CreateElement("节点名称");     //将节点加到指定节点下,作为其子节点
    root.AppendChild(node);     //将节点加到指定节点下某个子节点前
    root.InsertBefore(node,root.ChildeNodes[i]);     //为指定节点的新建属性并赋值
    node.SetAttribute("id","11111");     //为指定节点添加子节点
    root.AppendChild(node);     //获取指定节点的指定属性值
    string id=node.Attributes["id"].Value;     //获取指定节点中的文本
    string content=node.InnerText;     //保存XML文件
    xml.Save(“xml文件存储的路径path”); 更多信息请看: http://www.cnblogs.com/fish-li/archive/2013/05/05/3061816.html

xml之基本操作的更多相关文章

  1. XML的基本操作

    所有 XML 文档中的文本均会被解析器解析.只有 CDATA 区段(CDATA section)中的文本会被解析器忽略.CDATA 部分中的所有内容都会被解析器忽略.CDATA 部分由 "& ...

  2. C# 处理XML的基本操作

    文章部分代码引用参考文章, 文末参考文章已标注 ,本篇文章建立在两篇参考文章基础上,可以先阅读参考文章 XML 相关类 XDocument XmlDocument XmlReader  XmlWrit ...

  3. mybatis配置mapper.xml 的基本操作

    XML 映射文件 本文参考mybatis中文官网进行学习总结:http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html MyBatis 的真正强大在于它的 ...

  4. mybatis(三)配置mapper.xml 的基本操作

    参考:https://www.cnblogs.com/wuzhenzhao/p/11101555.html XML 映射文件 本文参考mybatis中文官网进行学习总结:http://www.myba ...

  5. php xml 的基本操作类

    class xmlMessage{ protected $doc; protected $rootKey; public function __construct() { $this->doc ...

  6. xml基本操作和保存配置文件应用实例

    引言:在实际项目中遇到一些关于xml操作的问题,被逼到无路可退的时候终于决定好好研究xml一番.本文首先介绍了xml的基本操作,后面写了一个经常用到的xml保存配置文件的实例. xml常用方法: 定义 ...

  7. # java对xml文件的基本操作

    下面是简单的总结三种常用的java对xml文件的操作 1. dom方式对xml进行操作,这种操作原理是将整个xml文档读入内存总,在内存中进行操作,当xml文档非常庞大的时候就会出现内存溢出的异常,这 ...

  8. xml基本操作

    在实际项目中遇到一些关于xml操作的问题,被逼到无路可退的时候终于决定好好研究xml一番.xml是一种可扩展标记语言,可跨平台进行传输,因此xml被广泛的使用在很多地方. 本文由浅入深,首先就xml的 ...

  9. LINQ for XML简单示例

    LINQ,语言集成查询(Language Integrated Query)是一组用于c#和Visual Basic语言的扩展.它允许开发人员以与查询数据库相同的方式操作内存数据.从技术角度而言,LI ...

随机推荐

  1. CentOS / RHEL 7 : Chrony V/s NTP (Differences Between ntpd and chronyd)

    CentOS / RHEL 7 : Chrony V/s NTP (Differences Between ntpd and chronyd) Chosing between Chrony and N ...

  2. Xpath语法与lxml库

    1. Xpath 1 )什么是XPath? xpath(XML Path Language)是一门在XML和HTML文档中查找信息的语言,可用来在XML和HTML文档中对元素和属性进行遍历. 2) X ...

  3. java web 基本属性

    page指令 属性 描述 默认值 language 指定JSP页面使用的脚本语言 java import contenType include指令 taglib注释 <!--我是html注释-- ...

  4. 7-19 求链式线性表的倒数第K项

    7-19 求链式线性表的倒数第K项(20 分) 给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字. 输入格式: 输入首先给出一个正整数K,随后是若干正整数,最后以一个负整数表示 ...

  5. Redis Expire TTL命令

    Redis can be told that a key should only exist for a certain length of time. This is accomplished wi ...

  6. RAID级别简介

    独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(RAID, Redundant Array of Inexpensive ...

  7. UCloud 的安全秘钥

    UCloud 的安全秘钥(困难) 1200ms 262144K 每个 UCloud 用户会构造一个由数字序列组成的秘钥,用于对服务器进行各种操作.作为一家安全可信的云计算平台,秘钥的安全性至关重要.因 ...

  8. noip模拟赛 括号序列

    题目描述LYK有一个括号序列,但这个序列不一定合法.一个合法的括号序列如下:()是合法的括号序列.若A是合法的括号序列,则(A)是合法的括号序列.若A和B分别是合法的括号序列,则AB是合法的括号序列. ...

  9. [APIO2014] [Uoj103] [Bzoj3676] Palindromes回文串 [Manacher,后缀数组]

    用Manacher算法枚举回文子串,每次在后缀数组排序后的后缀数组中二分,因为用某一后缀和其他子串分别求匹配的长度,匹配长度在排序后该后缀的两侧具有单调性(匹配长度为min{H[x]|i<=x& ...

  10. 一个oracle bug

    最近发现一个RAC db的listener log增长特别快,于是去查看了一下. 先是查看了一下log的内容,发现都是 service_update这种内容,刷新的特别快. service_updat ...