C# LINQ + XML XElement + WCF Rest Services 方法 II

C# LINQ + XML XElement + WCF Rest Services 方法 II

   WS.cs ( Rest Client )
 
  using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Web;
  using System.Web.UI;
  using System.Web.UI.WebControls;
  using System.Xml.Linq;
 
  protected void Page_Load(object sender, EventArgs e)
  {
    foreach (LEAGUE_ITEM le in GetAttribute("http://vmser002.deisler.com/Service.svc/full"))
    {
      l.Text += le.LEAGUE_ID + "<br />";
      l.Text += le.LEAGUE_NAME + "<br />";
      l.Text += "<ul>";
 
      foreach (TEAM_ITEM t in le.TEAM)
      {
        l.Text += "<li>" + t.TEAM_ID + " : " + t.TEAM_NAME + "</li>\n<ul>";
 
        foreach (PLAYER_VIEW p in t.PLAYER)
        {
          l.Text += "<li>" + p.PlayerID + " : " + p.Player + "( Nation : " + p.Nation + ", Age : " + p.Age + " )</li>";
        }
 
        l.Text += "</ul>";
      }
 
      l.Text += "</ul>";
    }
  }
 
  private List<LEAGUE_ITEM> GetAttribute(string xml)
  {
    XElement elem = XElement.Load(xml);
 
    XNamespace ns = "http://schemas.datacontract.org/2004/07/SoccerRest";
 
    List<LEAGUE_ITEM> list = (from l in elem.Descendants(ns + "LEAGUE_ITEM")
      where (l.Element(ns + "LEAGUE_ID").Value == "1")
      select new LEAGUE_ITEM
      {
        LEAGUE_ID = l.Element(ns + "LEAGUE_ID").ToString(),
        LEAGUE_NAME = l.Element(ns + "LEAGUE_NAME").ToString(),
        TEAM = (from t in l.Elements(ns + "TEAM").Elements(ns + "TEAM_ITEM")
          where (t.Element(ns + "TEAM_ID").Value == "3")
          select new TEAM_ITEM {
            TEAM_ID = t.Element(ns + "TEAM_ID").ToString(),
            TEAM_NAME = t.Element(ns + "TEAM_NAME").ToString(),
            PLAYER = (from p in t.Elements(ns + "PLAYER").Elements(ns + "PLAYER_VIEW")
            select new PLAYER_VIEW
            {
              PlayerID = p.Element(ns + "PlayerID").ToString(),
              Player = p.Element(ns + "Player").ToString(),
              Position = p.Element(ns + "Position").ToString(),
              Team = p.Element(ns + "Team").ToString(),
              Age = p.Element(ns + "Age").ToString(),
              Nation = p.Element(ns + "Nation").ToString()
            }).ToList()
          }).ToList()
      }).ToList();
 
    return list;
  }
 
   Entity Class
 
   public class PLAYER_VIEW
   {
      public string PlayerID { get; set; }
      public string Player { get; set; }
      public string Position { get; set; }
      public string Nation { get; set; }
      public string Team { get; set; }
      public string Age { get; set; }
   }
 
   public class TEAM_ITEM
   {
      public string TEAM_ID { get; set; }
      public string TEAM_NAME { get; set; }
      public List<PLAYER_VIEW> PLAYER { get; set; }
   }
 
   public class LEAGUE_ITEM
   {
      public string LEAGUE_ID { get; set; }
      public string LEAGUE_NAME { get; set; }
      public List<TEAM_ITEM> TEAM { get; set; }
   }
 
   Rest Format ( XML Format )
 
  <ArrayOfPLAYER_VIEW xmlns="http://schemas.datacontract.org/2004/07/SoccerRest">
 
  <LEAGUE_ITEM>
    <LEAGUE_ID>1</LEAGUE_ID>
    <LEAGUE_NAME>German Bundesliga</LEAGUE_NAME>
    <TEAM>
      <TEAM_ITEM>
        <PLAYER>
          <PLAYER_VIEW>
            <Age>22</Age>
            <Nation>Germany</Nation>
            <Player>Mario Götze</Player>
            <PlayerID>4</PlayerID>
            <Position>Midfielders</Position>
            <Team>FC Bayern Munich</Team>
          </PLAYER_VIEW>
          <PLAYER_VIEW>
            <Age>28</Age>
            <Nation>Germany</Nation>
            <Player>Manuel Neuer</Player>
            <PlayerID>8</PlayerID>
            <Position>Goalkeeper</Position>
            <Team>FC Bayern Munich</Team>
          </PLAYER_VIEW>
 
          … …
 
        </PLAYER>
        <TEAM_ID>2</TEAM_ID>
        <TEAM_NAME>FC Bayern Munich</TEAM_NAME>
      </TEAM_ITEM>
      <TEAM_ITEM>
        <PLAYER>
          <PLAYER_VIEW>
            <Age>25</Age>
            <Nation>Japan</Nation>
            <Player>Shinji Kagawa</Player>
            <PlayerID>756</PlayerID>
            <Position>Midfielders</Position>
            <Team>Borussia Dortmund</Team>
          </PLAYER_VIEW>
          <PLAYER_VIEW>
            <Age>34</Age>
            <Nation>Germany</Nation>
            <Player>Sebastian Kehl</Player>
            <PlayerID>757</PlayerID>
            <Position>Midfielders</Position>
            <Team>Borussia Dortmund</Team>
          </PLAYER_VIEW>
 
          … …
 
        </PLAYER>
        <TEAM_ID>3</TEAM_ID>
        <TEAM_NAME>Borussia Dortmund</TEAM_NAME>
      </TEAM_ITEM>
    </TEAM>
 
    … …
 
  <LEAGUE_ITEM>
 
  </ArrayOfPLAYER_VIEW>