XML文件解析及C#基本实现

本文详细介绍XML(可扩展标记语言)的基本概念、语法特点及构成,包括XML声明、元素、属性、注释和CDATA区等内容,并提供C#读取XML文件的实例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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元素都必须有结束标签;
  • 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.youkuaiyun.com/com_ma/article/details/73277535

[2] https://www.jb51.net/article/99904.htm

[3] https://blog.youkuaiyun.com/Vblegend_2013/article/details/56489478

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值