【学习】Silverlight中读取XML文件

首先推荐一个博客,本人学习来自于这两个博客。然后经过自己的实验和摸索,左后学习到了自己的东西

作者: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。



 

 

posted @ 2012-03-19 01:21  Tiny&zzh  阅读(713)  评论(0编辑  收藏  举报