WP8解析XML格式文件

DOTA2 WebAPI请求返回的格式有两种,一种是XML,一种是JSON,默认是返回JSON格式,如果要返回XML格式的话,需要在加上format=xml。

这里举一个简单的解析XML格式的例子(更多XML操作):

<response>
<players>
<player>
<steamid>76561198092319753</steamid>
<communityvisibilitystate>1</communityvisibilitystate>
<profilestate>1</profilestate>
<personaname>偶买噶、Scohura</personaname>
<lastlogoff>1396240726</lastlogoff>
<profileurl>
http://steamcommunity.com/profiles/76561198092319753/
</profileurl>
<avatar>
http://media.steampowered.com/steamcommunity/public/images/avatars/f9/f90a468b223389164861722c599318216b388f18.jpg
</avatar>
<avatarmedium>
http://media.steampowered.com/steamcommunity/public/images/avatars/f9/f90a468b223389164861722c599318216b388f18_medium.jpg
</avatarmedium>
<avatarfull>
http://media.steampowered.com/steamcommunity/public/images/avatars/f9/f90a468b223389164861722c599318216b388f18_full.jpg
</avatarfull>
<personastate>0</personastate>
</player>
</players>
</response>

解析代码如下,输入Stream流转为String就是上面的文本

        private void prase(Stream xml)
        {
            userdata = XElement.Load(xml).Element("players").Element("player");
            //昵称赋值、溢出部分使用省略号代替
            username.Text = userdata.Element("personaname").Value;
            username.TextTrimming = TextTrimming.WordEllipsis;
            username.FontSize = (this.Height - 80)/3;
            //状态赋值
            switch (userdata.Element("personastate").Value)
            {
                case "0":
                    if (userdata.Element("communityvisibilitystate").Value.Equals("1"))
                    {
                        statusText = "该用户已将资料设为隐私";
                    }
                    else
                    {
                        statusText = "离线";
                    }
                    break;
                case "1":
                    statusText = "在线";
                    break;
                case "2":
                    statusText = "忙碌";
                    break;
                case "3":
                    statusText = "离开";
                    break;
                case "4":
                    statusText = "打盹";
                    break;
                case "5":
                    statusText = "想交易";
                    break;
                case "6":
                    statusText = "想游戏";
                    break;
                default :break;
            }
            status.Text = statusText;
            status.FontSize = (this.Height - 80) / 3;
            //状态辅助赋值
            if (!userdata.Element("personastate").Value.Equals("0"))
            {
                try
                {
                    extraText = userdata.Element("gameextrainfo").Value + "  游戏中";
                    username.Foreground = new SolidColorBrush(Colors.Green);
                    status.Foreground = new SolidColorBrush(Colors.Green);
                    extra.Foreground = new SolidColorBrush(Colors.Green);
                }
                catch
                {
                    username.Foreground = new SolidColorBrush(Colors.Blue);
                    status.Foreground = new SolidColorBrush(Colors.Blue);
                    extra.Foreground = new SolidColorBrush(Colors.Blue);
                }
            }
            else
            {
                extraText = "上次在线时间:";
                username.Foreground = new SolidColorBrush(Colors.Gray);
                status.Foreground = new SolidColorBrush(Colors.Gray);
                extra.Foreground = new SolidColorBrush(Colors.Gray);
            }
            extra.Text = extraText;
            extra.FontSize = (this.Height - 80) / 3;
            //头像赋值
            BitmapImage bitImg = new BitmapImage(new Uri(userdata.Element("avatarfull").Value));
            head.Source = bitImg;
        }  

 

说明:

以XElement.Load(Stream xml)将Stream转化成XElement形式,而后其子标签,则使用XElement.Element(“Name”)获得,所对应的值为XElement.Value。

posted @ 2014-03-31 19:30  Scohura  阅读(364)  评论(0编辑  收藏  举报