• 【学习】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。



     

  • 相关阅读:
    地图实现
    shiro有哪些组件
    MyBatis 与 Hibernate 有哪些不同?
    .#{}和${}的区别是什么?
    SpringMVC 流程
    怎么防止重复提交
    2019.4.17 映纷创意首页铺设练习
    2019.4.16 掌恒首页铺设练习
    2019.4.9 小作业 淘宝商品显示块
    2019.4.9 HTML+CSS写静态百度首页
  • 原文地址:https://www.cnblogs.com/zou90512/p/2405424.html
Copyright © 2020-2023  润新知