Значение не попадает в ожидаемый диапазон исключений winrt
Я пытаюсь прочитать этот XML:
<player>
<id>10101</id>
<name>Ricardo Ferreira Rodrigues</name>
<shirtnumber>1</shirtnumber>
<position>Guarda Redes</position>
<realteam>5</realteam>
</player>
и у меня есть этот код:
private async void LoadXml()
{
try
{
StorageFolder storageFolder = Package.Current.InstalledLocation;
StorageFile storageFile = await storageFolder.GetFileAsync("/users/1101046102/xml/players.xml");
string xml = await FileIO.ReadTextAsync(storageFile, Windows.Storage.Streams.UnicodeEncoding.Utf8);
var doc = XDocument.Parse(xml);
txtnome.Text = (string)doc.Root.Element("name");
txtshirtnumber.Text = (string)doc.Root.Element("shirtnumber");
txtposition.Text = (string)doc.Root.Element("position");
}
catch (Exception ex)
{
XmlTextBlock.Text = ex.Message;
}
}
и я получаю это "Значение не попадает в ожидаемое исключение диапазона". Кто-то может сказать мне, почему?
2 ответа
Ваш XML-документ имеет два корневых элемента, оба типа "player".
Ваш код пытается загрузить это в XDocument, и из-за этого возникают проблемы.
Попробуйте обернуть ваши элементы xml в контейнерный узел, например, так...
<players>
<player /> <!-- copied from above -->
<player /> <!-- copied from above -->
</players>
Затем вам нужно будет переписать ваши запросы, чтобы посмотреть на дочерние узлы корневого элемента. Обратите внимание, что, поскольку у вас есть их несколько, вы, вероятно, должны попытаться прочитать их в коллекцию.
string xml = "<players>"
+ " <player>"
+ " <id>10101</id>"
+ " <name>Ricardo Ferreira Rodrigues</name>"
+ " <shirtnumber>1</shirtnumber>"
+ " <position>Guarda Redes</position>"
+ " <realteam>5</realteam>"
+ " </player>"
+ " <player>"
+ " <id>10103</id>"
+ " <name>Antonio Manuel</name>"
+ " <shirtnumber>2</shirtnumber>"
+ " <position>Defesa</position>"
+ " <realteam>5</realteam>"
+ " </player>"
+ "</players>";
var doc = XDocument.Parse(xml);
var rootNode = doc.Root;
foreach (var child in rootNode.Descendants("player"))
{
// do something with the values of the child nodes here.
}
Обратите внимание, что в цикле не имеет смысла присваивать эти значения тем текстовым элементам управления, которые есть у вас, так как только последний элемент в коллекции будет записан так, как может использовать пользователь.
XML я хочу это:
<player>
<id>10101</id>
<name>Ricardo Ferreira Rodrigues</name>
<shirtnumber>1</shirtnumber>
<position>Guarda Redes</position>
<realteam>5</realteam>
</player>
<player>
<id>10103</id>
<name>Antonio Manuel</name>
<shirtnumber>2</shirtnumber>
<position>Defesa</position>
<realteam>5</realteam>
</player>
Именно с этим XML я получил ошибку "Значение не попадает в ожидаемый диапазон исключений".
<TextBlock Name="txtnome" HorizontalAlignment="Left" Margin="178,275,0,0" TextWrapping="Wrap" VerticalAlignment="Top"/>
<TextBlock Name="txtshirtnumber" HorizontalAlignment="Left" Margin="178,300,0,0" TextWrapping="Wrap" VerticalAlignment="Top"/>
<TextBlock Name="XmlTextBlock" HorizontalAlignment="Left" Margin="178,250,0,0" TextWrapping="Wrap" VerticalAlignment="Top"/>
<TextBlock Name="txtposition" HorizontalAlignment="Left" Margin="178,325,0,0" TextWrapping="Wrap" VerticalAlignment="Top"/>
Это мой текстовый блок