首先推荐一个博客,本人学习来自于这两个博客。然后经过自己的实验和摸索,左后学习到了自己的东西
作者:wangyafei_it 地址 http://archive.cnblogs.com/a/2206719/
讲述的很详细,关键了让你了解了读取XML文件的步骤和过程。
下面讲述本人自己的东西
<?xml version="1.0" encoding="utf-8"?> <Words> <NPC NID="0"> <Talk ID="0" Value="客观,本店新进一批货物,欢迎采购啊" /> <Talk ID="1" Value="该死的半兽人,夺走我的一批矿石。勇士,你愿意帮我夺回来吗?杀死半兽人*15" /> <Talk ID="1" Value="勇士。你愿意帮我的旺财报仇吗?杀死可恶半兽统领Boss*10。" /> </NPC> <NPC NID="1"> <Talk ID="0" Value="身上有药,BOSS不愁。客观,清仓跳楼吐血大甩卖啊。金疮药(小)只要1000哦" /> <Talk ID="1" Value="最近要开分店了,货源不足,你愿意帮我寻找5个金疮药(小)吗?" /> </NPC> <NPC NID="2"> <Talk ID="0" Value="帅哥,来件新潮的外套吧,把妹子必须的哦" /> <Talk ID="1" Value="家里钥匙丢了怎么办呢?帅哥,去(45,50),(65,65),(,)附近帮我找找吧?" /> </NPC> </Words>
这是本人自己设计和使用的XML文档
定义了一个结构体,用于实现任务对话
public struct Words
{
/// <summary>
/// NPC编号
/// </summary>
public string Speakerid;
/// <summary>
/// 第几句话
/// </summary>
public string WitchWords;
/// <summary>
/// 内容
/// </summary>
public string Content;
}
首先是使用XMLReader直接读取XML文件
XmlReader xReader = XmlReader.Create(e.Result);
Words c = new Words();
while (xReader.Read())//XmlReader读取XML数据---每次读取一个节点
{
if (xReader.Name == "NPC")
{
c = new Words();
xReader.MoveToFirstAttribute();//移动到第一个属性
c.Speakerid = xReader.Value;
}
if (xReader.Name == "Talk")//节点名称为Talk
{
xReader.MoveToAttribute("ID");//移动到名为ID的属性
c.WitchWords = xReader.Value;
xReader.MoveToAttribute("Value");
c.Content = xReader.Value;
Global.TalkAbout.words.Add(c);
}
}
然后是使用XDocument读取XML文件
XmlReader xReader = XmlReader.Create(e.Result); XDocument xdocument = XDocument.Load(xReader);
var pro = from f in xdocument.Descendants("Talk")
select new Words
{
Speakerid = f.Parent.Attribute("NID").Value,
WitchWords = f.Attribute("ID").Value,
Content = f.Attribute("Value").Value,
};
Global.TalkAbout.words.AddRange(pro);//不能直接使用Add
Global.TalkAbout.words.AddRange(pro);
上面这句话是我用于全局的List<Words>
public static class TalkAbout
{
//public static Dictionary<string, string> Words = new Dictionary<string, string>();
public static List<Words> words = new List<Words>();
}
命名空间是Global
所以调用就必须写Global.TalkAbout下面的words。