簡體   English   中英

C# - 從在線xml文件中獲取數據

[英]C# - Getting data from an online xml file

如何從此xml站點( http://xboxapi.duncanmackenzie.net/gamertag.ashx?GamerTag=Festive+Turkey )獲取數據並指定數據並將其用作字符串?

使用WebClient對象

    public static string GetWebPage(Uri uri) {
        if ((uri == null)) {
            throw new ArgumentNullException("uri");
        }

        using (var request = new WebClient()) {
            //Download the data
            var requestData = request.DownloadData(uri);

            //Return the data by encoding it back to text!
            return Encoding.ASCII.GetString(requestData);
        }
    }

如果要將XML直接轉換為可讀數據結構,可以通過URI將其直接加載到XDocument對象中。

string uri = "http://xboxapi.duncanmackenzie.net/gamertag.ashx?GamerTag=Festive+Turkey";
XDocument document = XDocument.Load(uri);

然后,您可以通過Linq-to-XML輕松地將信息提取為具體或匿名類型。 (檢查System.Linq和System.Xml.Linq名稱空間。)

處理XML的其他方法包括序列化,XmlDocuments和XPath等。

以下是您可以使用XML和Linq執行的操作示例。

using System;
using System.Linq;
using System.Xml.Linq;

class XboxStats
{
    static void Main()
    {
        string uri = "http://xboxapi.duncanmackenzie.net/gamertag.ashx?GamerTag=Festive+Turkey";
        XDocument document = XDocument.Load(uri);

        var xboxInfo = document.Element("XboxInfo");

        var data = new
        {
            AccountStatus = (string)xboxInfo.Element("AccountStatus"),
            PresenceInfo = new
            {
                Valid = (bool)xboxInfo.Element("PresenceInfo").Element("Valid"),
                Info = (string)xboxInfo.Element("PresenceInfo").Element("Info"),
                Info2 = (string)xboxInfo.Element("PresenceInfo").Element("Info2"),
                LastSeen = (DateTime)xboxInfo.Element("PresenceInfo").Element("LastSeen"),
                Online = (bool)xboxInfo.Element("PresenceInfo").Element("Online"),
                StatusText = (string)xboxInfo.Element("PresenceInfo").Element("StatusText"),
                Title = (string)xboxInfo.Element("PresenceInfo").Element("Title")
            },
            State = (string)xboxInfo.Element("State"),
            Gamertag = (string)xboxInfo.Element("Gamertag"),
            ProfileUrl = (string)xboxInfo.Element("ProfileUrl"),
            TileUrl = (string)xboxInfo.Element("TileUrl"),
            Country = (string)xboxInfo.Element("Country"),
            Reputation = (decimal)xboxInfo.Element("Reputation"),
            Bio = (string)xboxInfo.Element("Bio"),
            Location = (string)xboxInfo.Element("Location"),
            ReputationImageUrl = (string)xboxInfo.Element("ReputationImageUrl"),
            GamerScore = (int)xboxInfo.Element("GamerScore"),
            Zone = (string)xboxInfo.Element("Zone"),
            RecentGames = new
            {
                XboxUserGameInfos = from gameInfo in xboxInfo.Element("RecentGames").Elements("XboxUserGameInfo")
                                    select new
                                    {
                                        Game = new
                                        {
                                            Name = (string)gameInfo.Element("Game").Element("Name"),
                                            TotalAchievements = (int)gameInfo.Element("Game").Element("TotalAchievements"),
                                            TotalGamerScore = (int)gameInfo.Element("Game").Element("TotalGamerScore"),
                                            Image32Url = (string)gameInfo.Element("Game").Element("Image32Url"),
                                            Image64Url = (string)gameInfo.Element("Game").Element("Image64Url")
                                        },
                                        LastPlayed = (DateTime)gameInfo.Element("LastPlayed"),
                                        Achievements = (int)gameInfo.Element("Achievements"),
                                        GamerScore = (int)gameInfo.Element("GamerScore"),
                                        DetailsUrl = (string)gameInfo.Element("DetailsUrl")
                                    }

            }
        };

        Console.WriteLine(data.AccountStatus);

        foreach (var gameInfo in data.RecentGames.XboxUserGameInfos)
        {
            Console.WriteLine(gameInfo.Game.Name);
        }

        Console.Read();
    }
}

您可以使用WebClient類:

Uri url = new Uri("http://xboxapi.duncanmackenzie.net/gamertag.ashx?GamerTag=" + Uri.EscapeDataString(str));
using (var wc = new WebClient()) {
    return request.DownloadString(url);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM