天天看点

XML的C#解析

XML文件概述

XML全称Extensible Markup Language,可扩展标记语言,与超文本标记语言(HTML,HyperText Markup Language)同属于标准通用标记语言的子集。XML被设计用来传输和存储数据,使文档具有结构性;而HTML被设计用来显示数据。

XML的特点是:

– 与操作系统、编程语言的开发平台都无关;

– 可以实现不同系统之间的数据交互。

XML基本语法:

– 任何的起始标签都必须有一个结束标签,也可以使用简化写法,在大于符号之前紧跟一个斜线(/),例如,XML解析器会翻译成 ;

– 标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签;

– 所有的特性都必须有值;

所有的特性都必须在值的周围加上单引号或双引号

XML的C#解析

XML声明

<?xml version="1.0" encoding="UTF-8"?>
<students>
  <studnet>
  </studnet>
</students>      
XML的C#解析
XML的C#解析

属性

XML的C#解析

所有的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文件

01创建xml文件

<skills>
  <skill>
    <id>2</id>
    <name lang="中文">小伙砸</name>
    <damage>100</damage>
  </skill>
  <skill>
    <id>3</id>
    <name lang="英文">啦啦</name>
    <damage>200</damage>
  </skill>
  <skill>
    <id>4</id>
    <name lang="英文">哈哈</name>
    <damage>400</damage>
  </skill>
</skills>      

创建对应的类

public class skill
    {
        public int id { get; set;}
        public string name { get; set; }
        public string lange { get; set;}
        public int damage { get; set;}

        public override string ToString()
        {
            return $"{nameof(id)}: {id}, {nameof(name)}: {name}, {nameof(lange)}: {lange}, {nameof(damage)}: {damage}";
        }
    }      

解析

class Program
    {
        static void Main(string[] args)
        {
            //xml.Load(path);//导入指定xml文件
            //xml.Load(HttpContext.Current.Server.MapPath("~/file/bookstore.xml")); XmlNode root = xml.SelectSingleNode("/root");//指定一个节点
            //XmlNodeList childlist = root.ChildNodes;//获取节点下所有直接子节点
            //XmlNodeList nodelist = xml.SelectNodes("/Root/News");//获取同名同级节点集合string id=node.Attributes["id"].Value;//获取指定节点的指定属性值
            //string content = node.InnerText;//获取指定节点中的文本
            //root.HasChildNodes;//判断该节点下是否有子节点

            skill skill=null;
            XmlDocument xml =new XmlDocument();//初始化一个xml实例
            xml.Load("SkillinfoList.txt");//载入文件
            //xml.LoadXml(File.ReadAllText("SkillinfoList.txt"));//传递一个字符串
            //得到根节点
            //XmlNode root = xml.FirstChild;
            //得到根节点的所有字节点
            //XmlNodeList nodeList = root.ChildNodes;
            //或者这个
            XmlElement root = xml.DocumentElement;
            XmlNodeList nodelist=root.ChildNodes;
            //遍历输出.
            foreach (XmlNode node in nodelist)
            {     
                int id = int.Parse(node.ChildNodes[0].InnerText);//InnerText节点包含的所有文本内容
                string lang = node.ChildNodes[1].Attributes[0].InnerText;
                string name = node.ChildNodes[1].InnerText;
                int damage = int.Parse(node.ChildNodes[2].InnerText);
                skill =new skill(){damage = damage,id = id,lange = lang,name = name,};
                Console.WriteLine(skill.id + " " + skill.lange + " " + skill.name + " " + skill.damage);
            }

        
            Console.ReadKey();
        }
    }      

Document 对象的属性

​​​http://www.w3school.com.cn/xmldom/dom_document.asp​​ XmlDocument类

1、DocumentElement属性返回根标签(不是根节点)。

2、XmlElement继承自XmlNode。可以通过XmlElement类对象获取属性的值,将XmlNode对象通过向下转型为XmlElement对象,在通过XMLElement对象获取属性值。GetAttribute(属性名)方法可以通过属性名访问某一个属性。

3、Load方法可以通过路径加载Xml文件,loadXml方法是通过string类型的文本加载Xml文件