asp.net解析xml的笔记

一个小游戏里的例子,游戏里面商品的属性通过XML写成配置文件,这样方便修改物品的属性和修改所有商品。

1.XML文件

<?xml version="1.0" encoding="utf-8" ?>
<!--
商品属性
ID:商品ID,唯一值
Type:商品分类:food-表示食品,toy-表示玩具,cosmetics-表示化妆品,drug-表示药品
Time:使用次数
Effect:使用效果,表示形式:饥饿指数|清洁指数|健康指数|心情指数|魅力指数|智力指数|经验值
IsSale:是否出售,0表示没出售,1表示在出售
-->
<store>
  <Item>
    <ID>1</ID>
    <Type>food</Type>
    <Name>强力丸</Name>
    <Price>10</Price>
    <Times>5</Times>
    <Effect>20|0|0|0|0|0|5</Effect>
    <IsSale>1</IsSale>
  </Item>
  <Item>
    <ID>2</ID>
    <Type>toy</Type>
    <Name>足球</Name>
    <Price>20</Price>
    <Times>5</Times>
    <Effect>0|0|0|10|0|20|5</Effect>
    <IsSale>1</IsSale>
  </Item>
</store>

2.封装好的物品属性

    /// <summary>
    /// 商品列表类
    /// </summary>
    public class StoreItem
    {
        private int Id;
        private string itemName;
        private string itemType;
        private int itemPrice;
        private int itemTimes;
        private string itemEffect;
        private bool isSale;
        /// <summary>
        /// 商品ID
        /// </summary>
        public int ID
        {
            get { return Id; }
            set { Id = value; }
        }
       
        /// <summary>
        /// 商品名称
        /// </summary>
        public string ItemName
        {
            get { return itemName; }
            set { itemName = value; }
        }
       
        /// <summary>
        /// 商品类型
        /// </summary>
        public string ItemType
        {
            get { return itemType; }
            set { itemType = value; }
        }

        /// <summary>
        /// 商品价格
        /// </summary>
        public int ItemPrice
        {
            get { return itemPrice; }
            set { itemPrice = value; }
        }

        /// <summary>
        /// 使用次数
        /// </summary>
        public int ItemTimes
        {
            get { return itemTimes; }
            set { itemTimes = value; }
        }

        /// <summary>
        /// 使用效果
        /// </summary>
        public string ItemEffect
        {
            get { return itemEffect; }
            set { itemEffect = value; }
        }

        /// <summary>
        /// 是否出售
        /// </summary>
        public bool IsSale
        {
            get { return isSale; }
            set { isSale = value; }
        }
        public override string ToString()
        {
            return "<br/>ID:" + Id + "<br/>Name:" + itemName + "<br/>Type:" + itemType + "<br/>Effect:" + itemEffect  +"<br/>Price:" + itemPrice + "<br/>Times:" + itemTimes + "<br/>IsSale:" + isSale;
        }

    }

 

3.封装物品的疗效

    /// <summary>
    /// 物品的疗效,表示增加属性的点数
    /// </summary>
    public struct StoreItemEffect
    {
        private int hunger;
        /// <summary>
        /// 增加饥饿点数
        /// </summary>
        public int Hunger
        {
            get { return hunger; }
            set { hunger = value; }
        }
        private int clean;
        /// <summary>
        /// 增加清洁点数
        /// </summary>
        public int Clean
        {
            get { return clean; }
            set { clean = value; }
        }
        private int health;
        /// <summary>
        /// 增加健康点数
        /// </summary>
        public int Health
        {
            get { return health; }
            set { health = value; }
        }
        private int mood;
        /// <summary>
        /// 增加心情点数
        /// </summary>
        public int Mood
        {
            get { return mood; }
            set { mood = value; }
        }
        private int charm;
        /// <summary>
        /// 增加魅力点数
        /// </summary>
        public int Charm
        {
            get { return charm; }
            set { charm = value; }
        }
        private int smart;
        /// <summary>
        /// 增加智力点数
        /// </summary>
        public int Smart
        {
            get { return smart; }
            set { smart = value; }
        }
        private int experience;
        /// <summary>
        /// 增加经验点数
        /// </summary>
        public int Experience
        {
            get { return experience; }
            set { experience = value; }
        }
        public override string ToString()
        {
            return "<br/>饥饿+" + hunger + "<br/>清洁+" + clean + "<br/>健康+" + health + "<br/>心情+" + mood + "<br/>魅力+" + charm + "<br/>智力+" + smart + "<br/>经验+" + experience;
        } 
    }

4.解析物品文件,返回商品字典

       /// <summary>
        /// 商店配置表路径
        /// </summary>
        private readonly static string configPath = HttpContext.Current.Server.MapPath("/config/store.xml");
        /// <summary>
        /// 获取商品列表
        /// </summary>
        /// <returns>商品列表</returns>
        public  static Dictionary<int,StoreItem> getStoreItem()
        {
            StoreItem stoItem;
            Dictionary<int, StoreItem> Dict = new Dictionary<int, StoreItem>();
            XmlDocument xml = new XmlDocument();
            xml.Load(configPath);
            XmlNodeList rootList = xml.SelectNodes("g");
            foreach (XmlNode xn in rootList)
            {
                stoItem = new StoreItem();
                stoItem.ID = int.Parse(xn.ChildNodes[0].InnerText);
                stoItem.ItemName = xn.ChildNodes[2].InnerText;
                stoItem.ItemType = xn.ChildNodes[1].InnerText;
                stoItem.ItemPrice = int.Parse(xn.ChildNodes[3].InnerText);
                stoItem.ItemTimes = int.Parse(xn.ChildNodes[4].InnerText);
                stoItem.ItemEffect = xn.ChildNodes[5].InnerText;
                if (xn.ChildNodes[6].InnerText.Trim() == "1")
                    stoItem.IsSale = true;
                else
                    stoItem.IsSale = false;
                Dict.Add(stoItem.ID, stoItem);
            }
            return Dict;
        }

5.通过物品ID返回相应物品的疗效数值

        /// <summary>
        /// 根据物品ID返回相应物品的疗效值
        /// </summary>
        /// <param name="stoItemID">表示传入商品ID</param>
        /// <returns>物品疗效值</returns>
        public static StoreItemEffect getItemEffect(int stoItemID)
        {
            Dictionary<int, StoreItem> Dict = new Dictionary<int, StoreItem>();
            Dict = getStoreItem();
            string[] effect=Dict[stoItemID].ItemEffect.Split('|');
            StoreItemEffect stoIEffect = new StoreItemEffect();
            stoIEffect.Hunger = int.Parse(effect[0].ToString());
            stoIEffect.Clean = int.Parse(effect[1].ToString());
            stoIEffect.Health = int.Parse(effect[2].ToString());
            stoIEffect.Mood = int.Parse(effect[3].ToString());
            stoIEffect.Charm = int.Parse(effect[4].ToString());
            stoIEffect.Smart = int.Parse(effect[5].ToString());
            stoIEffect.Experience = int.Parse(effect[6].ToString());
            return stoIEffect;
        }
 

posted on 2009-04-08 22:27  wayne_wang  阅读(1699)  评论(0)    收藏  举报