简体   繁体   English

在C#中解析XML文档

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM