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

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.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

  • 5
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#解析XML文件有两种方式:XmlDocument和XmlReader。 1. 使用XmlDocument解析XML文件 XmlDocument是一种基于树形结构的解析方式,可以将整个XML文档加载到内存中,然后通过操作节点的方式来访问XML文档中的数据。 以下是一个使用XmlDocument解析XML文件的例子: ```csharp XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("file.xml"); // 加载XML文件 XmlNodeList nodeList = xmlDoc.SelectNodes("//book"); // 选择所有book节点 foreach (XmlNode node in nodeList) { string title = node.SelectSingleNode("title").InnerText; // 获取title节点的文本内容 string author = node.SelectSingleNode("author").InnerText; // 获取author节点的文本内容 Console.WriteLine("Title: {0}, Author: {1}", title, author); } ``` 2. 使用XmlReader解析XML文件 XmlReader是一种基于流的解析方式,可以逐个节点地读取XML文档中的数据,不需要将整个XML文档加载到内存中。 以下是一个使用XmlReader解析XML文件的例子: ```csharp XmlReaderSettings xmlReaderSettings = new XmlReaderSettings(); xmlReaderSettings.IgnoreWhitespace = true; // 忽略空白 xmlReaderSettings.IgnoreComments = true; // 忽略注释 using (XmlReader xmlReader = XmlReader.Create("file.xml", xmlReaderSettings)) { while (xmlReader.Read()) { if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "book") { string title = xmlReader.GetAttribute("title"); // 获取title属性的值 string author = xmlReader.GetAttribute("author"); // 获取author属性的值 Console.WriteLine("Title: {0}, Author: {1}", title, author); } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值