2015-11-08 2 views
1

UTF, похоже, не работает над моим кодом. Это говорит об ошибке в строке 125.Как обработать Xml в приложении C# WPF

<feed> 

</feed> 

Я попытался указать, что UTF я использую, но не кажется, что работать

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(); 

ответ

4

Сделайте свою жизнь проще с помощью Linq To XML.

Следующий код просто работает и более читабельен, чем использование низкоуровневого XmlReader.

Предполагая, что xml хранится в файле с именем 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(); 
+1

'int.Parse (p.Attribute ("Время"). Value)' может быть сокращен до '(INT) p.Attribute ("время")' как 'XAttribute' (например,' XElement') реализует преобразование, чтобы сделать такие преобразования немного проще и короче. –

+0

@MartinHonnen хорошо знать. Thansk. Я редактировал свой код. – CodeNotFound