2010-05-31 3 views

ответ

3

Если вы хотите, чтобы получить 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(); 
    } 
} 
6

Используйте 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); 
     } 
    } 
0

Вы можете использовать WebClient класса:

Uri url = new Uri("http://xboxapi.duncanmackenzie.net/gamertag.ashx?GamerTag=" + Uri.EscapeDataString(str)); 
using (var wc = new WebClient()) { 
    return request.DownloadString(url); 
} 
Смежные вопросы