天天看點

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檔案