简体   繁体   English

C# - 从在线xml文件中获取数据

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

如何从此xml站点( http://xboxapi.duncanmackenzie.net/gamertag.ashx?GamerTag=Festive+Turkey )获取数据并指定数据并将其用作字符串?

Use a WebClient object 使用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);
        }
    }

If you want to get the XML into a readable data structure directly, you can load it via the URI directly into an XDocument object. 如果要将XML直接转换为可读数据结构,可以通过URI将其直接加载到XDocument对象中。

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

You can then easily extract the information via Linq-to-XML into either a concrete or anonymous type. 然后,您可以通过Linq-to-XML轻松地将信息提取为具体或匿名类型。 (Check the System.Linq and System.Xml.Linq namespaces.) (检查System.Linq和System.Xml.Linq名称空间。)

Other methods of dealing with the XML include serialization, XmlDocuments and XPath, etc. 处理XML的其他方法包括序列化,XmlDocuments和XPath等。

Here is a sample of something you could do with XML and Linq. 以下是您可以使用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();
    }
}

You can use the WebClient class: 您可以使用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