1

The UTF don't seem to work on my code. It is saying error in line 125.

<feed>

</feed>

I have tried specifying what utf am using but dont seem to work

  var results = XElement.Load("games.xml")
    .Element("content.items")
    .Element("content.head")
    .Element("content.body")
    .Elements("results")
    .Elements("result");

var query = (from result in results
    let homeTeam = result.Element("home-team")
    let awayTeam = result.Element("away-team")
    let lastScorer = result.Descendants("scorers").Elements("scorer").OrderByDescending(p => (int)p.Attribute("time")).FirstOrDefault()
    select new
    {
          HomeTeam = homeTeam.Element("team-name").Value,
          AwayTeam = awayTeam.Element("team-name").Value,

          HomeTeamScore = homeTeam.Element("score").Value,
          AwayTeamScore = awayTeam.Element("score").Value,

          LastScorerName = lastScorer != null ? lastScorer.Element("player-name").Value : string.Empty,
          LastScoreTime = lastScorer != null ? (int?)lastScorer.Attribute("time") : null
    }).ToList();

1 Answer 1

4

Make your life easier by using Linq To XML.

The following code just work and is more readable than using the low-level XmlReader.

Assuming that the xml is stored in a file named games.xml.

    var results = XElement.Load("games.xml")
        .Element("content.items")
        .Element("content.head")
        .Element("content.body")
        .Elements("results")
        .Elements("result");

    var query = (from result in results
        let homeTeam = result.Element("home-team")
        let awayTeam = result.Element("away-team")
        let lastScorer = result.Descendants("scorers").Elements("scorer").OrderByDescending(p => (int)p.Attribute("time")).FirstOrDefault()
        select new
        {
              HomeTeam = homeTeam.Element("team-name").Value,
              AwayTeam = awayTeam.Element("team-name").Value,

              HomeTeamScore = homeTeam.Element("score").Value,
              AwayTeamScore = awayTeam.Element("score").Value,

              LastScorerName = lastScorer != null ? lastScorer.Element("player-name").Value : string.Empty,
              LastScoreTime = lastScorer != null ? (int?)lastScorer.Attribute("time") : null
        }).ToList();
Sign up to request clarification or add additional context in comments.

1 Comment

int.Parse(p.Attribute("time").Value) can be shortened to (int)p.Attribute("time") as XAttribute (like XElement) implements a conversion to make such conversions a bit easier and shorter.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.