XML 指可擴展標記語言,XML 被設計用來傳輸和存儲數據。XML 被設計用來結構化、存儲以及傳輸信息。node
<?xml version="1.0" encoding="ISO-8859-1"?> <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
這個 XML 文檔仍然沒有作任何事情。它僅僅是包裝在 XML 標籤中的純粹的信息。咱們須要編寫軟件或者程序,才能傳送、接收和顯示出這個文檔。ide
第一行是 XML 聲明。它定義 XML 的版本 (1.0) 和所使用的編碼 (ISO-8859-1 = Latin-1/西歐字符集)。編碼
下一行描述文檔的根元素(像在說:「本文檔是一個便籤」):<note>spa
接下來 4 行描述根的 4 個子元素(to, from, heading 以及 body):設計
<to>George</to>code
<from>John</from>orm
<heading>Reminder</heading>xml
<body>Don't forget the meeting!</body>blog
最後一行定義根元素的結尾: </note>文檔
XML 文檔必須包含根元素。該元素是全部其餘元素的父元素。
XML 文檔中的元素造成了一棵文檔樹。這棵樹從根部開始,並擴展到樹的最底端。 全部元素都可擁有子元素:
<root> <child> <subchild>.....</subchild> </child> <child> <subchild>.....</subchild> </child> </root>
XML 元素指的是從(且包括)開始標籤直到(且包括)結束標籤的部分。
<bookstore> <book category="CHILDREN"> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore>
<bookstore> 和 <book> 都擁有元素內容,由於它們包含了其餘元素。<author> 只有文本內容,由於它僅包含文本。
只有 <book> 元素擁有屬性 (category="CHILDREN")。
全部 XML 元素都須有關閉標籤
XML 標籤對大小寫敏感
XML 必須正確地嵌套
XML 文檔必須有根元素
XML 的屬性值須加引號
在C#中使用控制檯程序,用 XMLDocument進行xml操做,包括查詢,增長,修改,刪除和保存。
下面使用C#來解析一個xml文檔:
<skills> <skill> <id>2</id> <name lang="cn">天下無雙</name> <damage>123</damage> </skill> <skill> <id>3</id> <name lang="cn">永恆零度</name> <damage>90</damage> </skill> <skill> <id>4</id> <name lang="en">咫尺天涯</name> <damage>400</damage> </skill> </skills>
定義一個Skill類:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _030_項目 { // 技能類 class Skill { public int Id { get; set; } public string Name { get; set; } public string Lang { get; set; } public int Damage { get; set; } public override string ToString() { return string.Format("Id: {0}, Name: {1}, Lang: {2}, Damage: {3}", Id, Name, Lang, Damage); } } }
解析:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using System.Xml; namespace _030_項目了 { class Program { static void Main(string[] args) { //建立技能信息集合,用來存儲全部的技能信息 List<Skill> skillList = new List<Skill>(); // XmlDocment專門用來解析xml文檔的 XmlDocument xmlDoc = new XmlDocument(); //選擇要加載解析的xml文檔的名字 //xmlDoc.Load("skillinfo.txt"); xmlDoc.LoadXml( File.ReadAllText("skillinfo.txt") );//傳遞一個字符串(xml格式的字符串) //獲得根結點 (xmlnode用來表明一個結點) XmlNode rootNode = xmlDoc.FirstChild;//獲取第一個結點 //獲得根結點下面的子節點的集合 XmlNodeList skillNodeList= rootNode.ChildNodes;//獲取當前結點下面的全部子節點 foreach (XmlNode skillNode in skillNodeList) { Skill skill = new Skill(); XmlNodeList fieldNodeList = skillNode.ChildNodes;//獲取skill結點下面全部的結點 foreach (XmlNode fieldNode in fieldNodeList) { if (fieldNode.Name == "id")//經過Name屬性 能夠獲取一個結點的名字 { int id = Int32.Parse(fieldNode.InnerText);//獲取結點內部的文本 skill.Id = id; }else if (fieldNode.Name == "name") { string name = fieldNode.InnerText; skill.Name = name; skill.Lang = fieldNode.Attributes[0].Value; } else { skill.Damage = Int32.Parse(fieldNode.InnerText); } } skillList.Add(skill); } foreach (Skill skill in skillList) { Console.WriteLine(skill); } Console.ReadKey(); } } }
輸出結果: