XML檔案概述
XML全稱Extensible Markup Language,可擴充标記語言,與超文本标記語言(HTML,HyperText Markup Language)同屬于标準通用标記語言的子集。XML被設計用來傳輸和存儲資料,使文檔具有結構性;而HTML被設計用來顯示資料。
XML的特點是:
– 與作業系統、程式設計語言的開發平台都無關;
– 可以實作不同系統之間的資料互動。
XML基本文法:
– 任何的起始标簽都必須有一個結束标簽,也可以使用簡化寫法,在大于符号之前緊跟一個斜線(/),例如,XML解析器會翻譯成 ;
– 标簽必須按合适的順序進行嵌套,是以結束标簽必須按鏡像順序比對起始标簽;
– 所有的特性都必須有值;
所有的特性都必須在值的周圍加上單引号或雙引号

XML聲明
<?xml version="1.0" encoding="UTF-8"?>
<students>
<studnet>
</studnet>
</students>
屬性
、
所有的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檔案