我如何解析XML Blob并关联来自同级节点的数据?

问题描述 投票:0回答:1

我想解析这个XML blob:

<NFLTeams>
  <Coaches>
    <HeadCoach>Bill Belichick</HeadCoach>
    <OffensiveCoordinator>Josh McDaniels</OffensiveCoordinator>
    <DefensiveCoordinator>Unknown</DefensiveCoordinator>
  </Coaches>
  <Players>
    <Quarterback>Jarret Stidham</Quarterback>
    <WideReceiver>N'Keal Harry</WideReceiver>
  </Players>
  <TeamInfo>
    <TeamName>Patriots</TeamName>
    <StadiumCapacity>65878</StadiumCapacity>
    <StadiumLocation>Foxboro, MA</StadiumLocation>
  </TeamInfo>
  <Coaches>
    <HeadCoach>Adam Gase</HeadCoach>
    <OffensiveCoordinator>Dowell Loggains</OffensiveCoordinator>
    <DefensiveCoordinator>Gregg Williams</DefensiveCoordinator>
  </Coaches>
  <Players>
    <Quarterback>Sam Darnold</Quarterback>
    <WideReceiver>Breshad Perriman</WideReceiver>
  </Players>
  <TeamInfo>
    <TeamName>Jets</TeamName>
    <StadiumCapacity>82500</StadiumCapacity>
    <StadiumLocation>East Rutherford, NJ</StadiumLocation>
  </TeamInfo>
  <Coaches>
    <HeadCoach>Anthony Lynn</HeadCoach>
    <OffensiveCoordinator>Shane Steichen</OffensiveCoordinator>
    <DefensiveCoordinator>Gus Bradley</DefensiveCoordinator>
  </Coaches>
  <Players>
    <Quarterback>Tyrod Taylor</Quarterback>
    <WideReceiver>Keenan Allen</WideReceiver>
  </Players>
  <TeamInfo>
    <TeamName>Chargers</TeamName>
    <StadiumCapacity>27000</StadiumCapacity>
    <StadiumLocation>Carson, CA</StadiumLocation>
  </TeamInfo>
</NFLTeams>

并且我想将数据放入List<NFLTeam>,其中NFLTeam是:

public class NFLTeam
{
        public string Quarterback { get; set; }
        public string TeamName { get; set; }
        public int StadiumCapacity { get; set; }
}

这样,如果我解析上面的blob并将其内容输出到控制台,它将看起来像这样:

Quarterback: 'Jarret Stidham', TeamName: 'Patriots', StadiumCapacity: '65878'
Quarterback: 'Sam Darnold', TeamName: 'Jets', StadiumCapacity: '82500'
Quarterback: 'Tyrod Taylor', TeamName: 'Chargers', StadiumCapacity: '27000'

我该如何使用C#7.3和.NET Framework 4.8?

c# xml siblings c#-7.3 .net-4.8
1个回答
0
投票
c#

void Main() { XDocument xdoc = XDocument.Parse(@"<NFLTeams> <Coaches> <HeadCoach>Bill Belichick</HeadCoach> <OffensiveCoordinator>Josh McDaniels</OffensiveCoordinator> <DefensiveCoordinator>Unknown</DefensiveCoordinator> </Coaches> <Players> <Quarterback>Jarret Stidham</Quarterback> <WideReceiver>N'Keal Harry</WideReceiver> </Players> <TeamInfo> <TeamName>Patriots</TeamName> <StadiumCapacity>65878</StadiumCapacity> <StadiumLocation>Foxboro, MA</StadiumLocation> </TeamInfo> <Coaches> <HeadCoach>Adam Gase</HeadCoach> <OffensiveCoordinator>Dowell Loggains</OffensiveCoordinator> <DefensiveCoordinator>Gregg Williams</DefensiveCoordinator> </Coaches> <Players> <Quarterback>Sam Darnold</Quarterback> <WideReceiver>Breshad Perriman</WideReceiver> </Players> <TeamInfo> <TeamName>Jets</TeamName> <StadiumCapacity>82500</StadiumCapacity> <StadiumLocation>East Rutherford, NJ</StadiumLocation> </TeamInfo> <Coaches> <HeadCoach>Anthony Lynn</HeadCoach> <OffensiveCoordinator>Shane Steichen</OffensiveCoordinator> <DefensiveCoordinator>Gus Bradley</DefensiveCoordinator> </Coaches> <Players> <Quarterback>Tyrod Taylor</Quarterback> <WideReceiver>Keenan Allen</WideReceiver> </Players> <TeamInfo> <TeamName>Chargers</TeamName> <StadiumCapacity>27000</StadiumCapacity> <StadiumLocation>Carson, CA</StadiumLocation> </TeamInfo> </NFLTeams>"); var xelem = xdoc.Root.Elements("Players"); foreach (var el in xelem) { Console.WriteLine(string.Format("Quarterback: '{0}', TeamName: '{1}', StadiumCapacity: '{2}'" , el.Element("Quarterback").Value , ToXElement(el.NextNode).Element("TeamName").Value , ToXElement(el.NextNode).Element("StadiumCapacity").Value)); } } // Define other methods and classes here static XElement ToXElement(XNode node) { return node as XElement; // returns null if node is not an XElement }

输出

Quarterback: 'Jarret Stidham', TeamName: 'Patriots', StadiumCapacity: '65878'
Quarterback: 'Sam Darnold', TeamName: 'Jets', StadiumCapacity: '82500'
Quarterback: 'Tyrod Taylor', TeamName: 'Chargers', StadiumCapacity: '27000'
© www.soinside.com 2019 - 2024. All rights reserved.