WP 8解析XML形式ファイル

14466 ワード

DOTA 2 WebAPIリクエストで返されるフォーマットは、XMLとJSON、デフォルトでJSONの2種類あり、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>

解析コードは次のようになります.ストリームストリームを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.