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(); } } }
输出结果: