У меня есть файл XML, который я хочу проанализировать.Это дольше, чем то, что я опубликую здесь, но только эта часть меня интересует в этом вопросе:
<Team>
<TeamId>1187457</TeamId>
<TeamName>Zanardi Redwings</TeamName>
<Arena>
<ArenaId>1184019</ArenaId>
<ArenaName>Evolution</ArenaName>
</Arena>
<League>
<LeagueId>37</LeagueId>
<LeagueName>România</LeagueName>
</League>
<Country>
<CountryId>36</CountryId>
<CountryName>România</CountryName>
</Country>
<LeagueLevelUnit>
<LeagueLevelUnitId>4109</LeagueLevelUnitId>
<LeagueLevelUnitName>V.171</LeagueLevelUnitName>
</LeagueLevelUnit>
<Region>
<RegionId>799</RegionId>
<RegionName>Prahova</RegionName>
</Region>
<YouthTeam>
<YouthTeamId>2337461</YouthTeamId>
<YouthTeamName>Little Redwings</YouthTeamName>
<YouthLeague>
<YouthLeagueId>436902</YouthLeagueId>
<YouthLeagueName>Normandie Ligue des jeunes</YouthLeagueName>
</YouthLeague>
</YouthTeam>
</Team>
Из приведенной выше части мне нужно только прочитать данные из TeamId
и TeamName
дочерние узлы.Чтобы добиться этого, я написал следующий код:
Nodes = Node.SelectNodes("Team");
foreach (XmlNode j in Nodes)
{
XmlNodeList TeamDetails = j.SelectNodes("*");
foreach (XmlNode k in TeamDetails)
{
switch (k.Name)
{
case "TeamName":
{
UserTeamNames[counter] = k.InnerXml;
break;
}
case "TeamId":
{
if (!int.TryParse(k.InnerXml, out UserTeamIDs[counter]))
{
ShowErrorMessageBox("Parsing TeamID from XML file failed!"); //A function which sets some parameters for MessageBox.Show() then calls it
}
break;
}
}
}
}
В приведенном выше коде counter
- это переменная int
, которая мне нужна в другой части кода.
Код работает отлично, но я хочу устранить бесполезные циклы и тестирование, когда узел, над которым я работаю, не является либо TeamName
, либо TeamID
.
Я подозреваю, что искомый ответ как-то связан с выражениями XPath, но я не уверен.
Как я могу прочитать данные только из * упомянутогоузлы, без каких-либо бесполезных операций?