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> |