1.读取XML文档
此次操作的有一个TXT文档,定义了一个对应的类。
1.1 SkillInfo.txt
<skills> <skill> <id>2</id> <name lang="cn">天下无双</name> <damage>123</damage> </skill> <skill> <id>3</id> <name lang="cn">永恒零度</name> <damage>89</damage> </skill> <skill> <id>4</id> <name lang="en">ryfh</name> <damage>56</damage> </skill> </skills>
1.2 Skill.CS
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _330_XML文档 { /// <summary> /// 技能类 /// </summary> class Skill { public int Id; 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); } } }
1.3 Program.CS
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace _330_XML文档
{
class Program
{
static void Main(string[] args)
{
//创建技能信息集合,用来储存所有的技能信息
List<Skill> skillList = new List<Skill>();
//XmlDocument专门用来解析xml文档
XmlDocument xmlDoc = new XmlDocument();
//选择要加载解析的xml文档的名字
//xmlDoc.Load("SkillInfo.txt");//第一种
xmlDoc.LoadXml(File.ReadAllText("SkillInfo.txt"));//第二种,传递一个字符串
//得到根节点
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;
//Attributes获取到一个属性集合
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();
}
}
}
2. 读取并解析技能信息XML
2.1 xmlSkillInfo.txt
<SkillInfo> <SkillList> <Skill SkillID="20002" SkillEngName="Smash" TriggerType="1" ImageFile="data/gfx/image/gui_icon_skill_000.dds" AvailableRace="7" > <Name>重击</Name> </Skill> <Skill SkillID="20003" SkillEngName="Hide" TriggerType="2" ImageFile="data/gfx/image/gui_icon_skill_001.dds" AvailableRace="1" > <Name>隐身</Name> </Skill> <Skill SkillID="20004" SkillEngName="Ikari" TriggerType="3" ImageFile="data/gfx/image/gui_icon_skill_002.dds" AvailableRace="1" > <Name>怒之翼</Name> </Skill> <Skill SkillID="20005" SkillEngName="Revenge" TriggerType="5" ImageFile="data/gfx/image/gui_icon_skill_003.dds" AvailableRace="2" > <Name>光之复仇</Name> </Skill> </SkillList> </SkillInfo>
2.2 Skill.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _331_xml解析技能信息 { class Skill { public int Id{get;set;} public string EngName { get; set;} public int TriggerType { get; set; } public string ImageFile { get; set; } public int AvailableRace { get; set; } public override string ToString() { return string.Format("Id:{0},EngName:{1},TriggerType:{2},","ImageFile:{3},AvailableRace:{4}", Id, EngName, TriggerType, ImageFile, AvailableRace); } } }
2.3 Program.CS
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; namespace _331_xml解析技能信息 { class Program { static void Main(string[] args) { List<Skill> skillList = new List<Skill>(); XmlDocument xmlDoc = new XmlDocument(); //xmlDoc.Load("xmlSkillInfo.txt"); xmlDoc.LoadXml(File.ReadAllText("xmlSkillInfo.txt")); /********** //XmlNode skillInfoNode = xmlDoc.FirstChild; //XmlNode skillListNode = skillInfoNode.FirstChild; **************/ XmlNode skillListNode = xmlDoc.FirstChild.FirstChild; XmlNodeList skillNodeList = skillListNode.ChildNodes; foreach(XmlNode skillNode in skillListNode) { Skill skill = new Skill(); XmlElement ele= skillNode["Name"]; skill.EngName = ele.InnerText; XmlAttributeCollection col= skillNode.Attributes;//获取该节点属性的集合 /*************** XmlAttribute IdAttribute = col["SkillID"]; skill.Id = Int32.Parse(IdAttribute.Value); *******************/ skill.Id = Int32.Parse(col["SkillID"].Value); skill.EngName = col["SkillEngName"].Value; skill.TriggerType = Int32.Parse(col["TriggerType"].Value); skill.AvailableRace = Int32.Parse(col["AvailableRace"].Value); skillList.Add(skill); } foreach(Skill s in skillList) { Console.WriteLine(s); } Console.ReadKey(); } } }