XML文件概述
XML全称Extensible Markup Language
,可扩展标记语言,与超文本标记语言(HTML,HyperText Markup Language)同属于标准通用标记语言的子集。XML被设计用来传输和存储数据,使文档具有结构性;而HTML被设计用来显示数据。
-
XML的特点是:
– 与操作系统、编程语言的开发平台都无关;
– 可以实现不同系统之间的数据交互。 -
XML基本语法:
– 任何的起始标签都必须有一个结束标签,也可以使用简化写法,在大于符号之前紧跟一个斜线(/),例如<part/>
,XML解析器会翻译成<part> </part>
;
– 标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签;
– 所有的特性都必须有值;
– 所有的特性都必须在值的周围加上单引号或双引号。
XML文件构成
XML声明
例子:
<?xml version="1.0" encoding="UTF-8"?>
XML声明一般是XML文档的第一行,声明由以下两个部分组成:
根元素
根元素是XML文档里面唯一的。开始放在最前面,结束放在最后面。
元素
- 所有的XML元素都必须有结束标签;
- XML标签对大小写敏感;
- 必须正确地嵌套;
- 命名规则:
- 名称中可以包含字母、数字或者其他的字符;
- 不能以数字或者标点符号开始;
- 不能包含空格。
- 空元素可以简写在一对尖括号里面:
<title> </title>
<title />
属性
语法如下,一个元素可以有多个属性:
<元素名 属性名="属性值" />
<元素名 属性名1="属性值1" 属性名2="属性值2" />
eg.
<Student ID=“S100”>
<Name>Tom</Name>
</Student>
注释
XML文件中的注释采用<!-- 注释 -->
格式。
- XML文件声明之前不能有注释;
- 注释不能嵌套。
CDATA区
在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当作原始内容处理,遇到此种情况,可以把这些内容放在CDATA区里,对于CDATA区域内的内容,XML解析程序不会处理,而是直接原封不动的输出。
语法为:
<![CDATA[ 内容 ]]>
C#读取XML文件
常用的方法是使用system.Xml
命名空间中的XmlDocument
类。
XmlDocument是基于文档结构模型的方式来读取XML文件。在XML文件中,可以把XML看作是由文档声明(Declare),元素(Element),属性(Attribute),文本(Text)等构成的一个树。最开始的一个结点叫作根结点,每个结点都可以有自己的子结点。
xn 代表一个结点
xn.Name; //这个结点的名称
xn.Value; //这个结点的值
xn.ChildNodes; //这个结点的所有子结点
xn.ParentNode; //这个结点的父结点
- 例子解析
<?xml version="1.0" encoding="utf-8"?>
<info>
<!--这是注释-->
<book id="b1" lang="en">
<name>c++</name>
<price>570</price>
</book>
<book id="b2" lang="en">
<name>c#</name>
<price>250</price>
</book>
</info>
使用System.Xml.XmlDocument
来解析:
XmlDocument xmlDoc = new XmlDocument();
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true; //忽略文档里面的注释
XmlReader reader = XmlReader.Create(@"file.xml", settings);
xmlDoc.Load(reader);
foreach (XmlElement book in xmlDoc.SelectNodes(@"info/book"))
{
// if you know attribute name simply use GetAttribute e.g.
Console.WriteLine("id value: {0}.", book.GetAttribute("id"));
// if you don't know attribute names you can loop e.g.
foreach (XmlAttribute attribute in book.Attributes)
{
Console.WriteLine("attribute with name {0} has value {1}.", attribute.Name, attribute.Value);
}
}
...
// 最后读取完毕之后要关掉 reader
reader.Close();
[1] https://blog.csdn.net/com_ma/article/details/73277535
[2] https://www.jb51.net/article/99904.htm
[3] https://blog.csdn.net/Vblegend_2013/article/details/56489478