[英]Parsing XML Document in C#
I am writing a C# code to parse the following XML doc : 我正在编写一个C#代码来解析以下XML文档:
<?xml version="1.0" encoding="utf-8" ?> <teams> <team id="1"> <name>RealMadrid</name> <players> <player id="1" role="Forward"> <firstname>Cristiano</firstname> <lastname>Ronaldo</lastname> <number>7</number> </player> <player id="2" role="Forward"> <firstname>Gareth</firstname> <lastname>Bale</lastname> <number>11</number> </player> <player id="3" role="Midfield"> <firstname>Toni</firstname> <lastname>Kroos</lastname> <number>8</number> </player> <player id="4" role="Midfield"> <firstname>Luka</firstname> <lastname>Modric</lastname> <number>19</number> </player> <player id="5" role="Defence"> <firstname>Sergio</firstname> <lastname>Ramos</lastname> <number>4</number> </player> <player id="6" role="Defence"> <firstname>Raphael</firstname> <lastname>Varane</lastname> <number>2</number> </player> <player id="7" role="Goalkeeper"> <firstname>Keylor</firstname> <lastname>Navas</lastname> <number>1</number> </player> </players> </team> <team id="2"> <name>Barcelona</name> <players> <player id="1" role="Forward"> <firstname>Lionel</firstname> <lastname>Messi</lastname> <number>10</number> </player> <player id="2" role="Forward"> <firstname>Neymar</firstname> <lastname>Jr.</lastname> <number>11</number> </player> <player id="3" role="Midfield"> <firstname>Ivan</firstname> <lastname>Rakitic</lastname> <number>4</number> </player> <player id="4" role="Midfield"> <firstname>Andres</firstname> <lastname>Iniesta</lastname> <number>8</number> </player> <player id="5" role="Defence"> <firstname>Gerard</firstname> <lastname>Pique</lastname> <number>3</number> </player> <player id="6" role="Defence"> <firstname>Javier</firstname> <lastname>Mascherano</lastname> <number>14</number> </player> <player id="7" role="Goalkeeper"> <firstname>Andre</firstname> <lastname>Ter Stegen</lastname> <number>1</number> </player> </players> </team> <team id="3"> <name>Liverpool</name> <players> <player id="1" role="Forward"> <firstname>Daniel</firstname> <lastname>Sturridge</lastname> <number>15</number> </player> <player id="2" role="Forward"> <firstname>Roberto</firstname> <lastname>Firmino</lastname> <number>11</number> </player> <player id="3" role="Midfield"> <firstname>Philippe</firstname> <lastname>Coutinho</lastname> <number>10</number> </player> <player id="4" role="Midfield"> <firstname>Adam</firstname> <lastname>Lallana</lastname> <number>20</number> </player> <player id="5" role="Defence"> <firstname>Joel</firstname> <lastname>Matip</lastname> <number>32</number> </player> <player id="6" role="Defence"> <firstname>Dejan</firstname> <lastname>Lovren</lastname> <number>6</number> </player> <player id="7" role="Goalkeeper"> <firstname>Simon</firstname> <lastname>Mignolet</lastname> <number>22</number> </player> </players> </team> </teams>
I want to write the firstname and lastname for players of a specific team. 我想为特定球队的球员写上名字和姓氏。 I wrote the following code :
我写了以下代码:
var realTeam = from db in xelement.Elements("team")
where (string)db.Element("name")=="RealMadrid"
select db;
//Console.WriteLine("Real Madrid");
foreach (var e in realTeam)
{
Console.WriteLine(e);
}
This code is giving all the xml part related to "RealMadrid". 这段代码给出了与“ RealMadrid”相关的所有xml部分。 What should I do write on the firstname and lastname of this part?
我应该怎么写这部分的名字和姓氏?
Any help is appreciated!! 任何帮助表示赞赏!
Do it like this: 像这样做:
var xmlContent = "YOUR XML";
var xmlDoc = XDocument.Parse(xmlContent);
var realTeamName = "RealMadrid";
var realTeam = from team in xmlDoc.Elements("teams")
.Descendants("team")
where team.Element("name").Value == realTeamName
select team;
var players = realTeam.Elements("players").Elements(); // get players
foreach (var player in players) // iterate over players
{
Console.WriteLine("First name: " + player.Element("firstname").Value);
Console.WriteLine("Last name: " + player.Element("lastname").Value);
}
So far you've got the team, but now you need to step into the team elements to get the players list and then the single player with firstname, lastname.... 到目前为止,您已经拥有了团队,但是现在您需要进入团队元素以获取玩家列表,然后是具有名字,姓氏的单个玩家。
As I mentioned in my comment, you're not selecting the players
element in your statement. 正如我在评论中提到的那样,您没有在声明中选择
players
元素。 Try the following: 请尝试以下操作:
var realTeam = from db in xelement.Elements("team")
where (string)db.Element("name")=="RealMadrid"
select db.Elements("players");
//Console.WriteLine("Real Madrid");
if (realTeam.Count() != 1)
{
//more than 1 team called RealMadrid was found, handle this case here
return;
}
foreach (var e in realTeam.Single())
{
Console.WriteLine("First Name: " + e.Element("firstname").Value); //or e.Element("firstname").ToString()
Console.WriteLine("Last Name: " + e.Element("lastname").Value);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.