2013-09-04 3 views
0

나는이 XML 읽으려고하고 winrt 예상 범위 예외에 속하지 않습니다

<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("https://stackoverflow.com/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; 
     } 
    } 

그리고 난이 무엇입니까 "값은하지 않습니다 예상 범위 예외 내에 "있습니다. 누군가 왜 저를 말할 수 있습니까?

+0

xml 파일의 맨 위에 xml 정의를 추가 했습니까? '' – ps2goat

+0

나를 위해 잘 작동하고있다. 값이 TextBlock에 표시됩니다. 예외가 발생합니다. – Kumar

+1

ps2goat XML 버전 태그를 넣지 않으면 예외가 발생하지 않습니다. 해당 태그가 없어도 코드가 정상적으로 실행됩니다. – dbw

답변

-1

내가 원하는 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"/> 

1

귀하의 XML 문서가 내 TextBlock의 두 가지 루트 요소를 가지고, 두 종류의 "플레이어"입니다.

코드가 XDocument로로드하려고하는데 문제가 있습니다.

<players> 
    <player /> <!-- copied from above --> 
    <player /> <!-- copied from above --> 
</players> 

그런 다음 루트 요소의 자식 노드를보고 쿼리를 다시 작성해야합니다 ... 그래서 같은 컨테이너 노드에서 XML 요소를 포장하십시오. 그것들의 배수가 있기 때문에 아마 그것들을 콜렉션으로 읽으려고 노력해야한다. 루프 내에서 텍스트는로만 컬렉션의 마지막은 사용자의 사용을 만들 수있는 방법으로 작성 얻을 것이다 한 제어에이 값을 할당 이해가되지 않는

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. 
     } 

참고.

+0

내 xml에 훨씬 많은 플레이어가 있기 때문에 Cant가 좋아합니다. –

+0

이 게시물의 요점은 위의 코드가 단일 플레이어가 포함 된 XML에서 제대로 작동하지만 제안한대로 루트 노드에 래핑되지 않은 배수가 파일에 포함되어있는 경우 실패합니다. 있는 그대로의 파일 구조는 작동하지 않으므로 다르게 접근해야합니다. – ZombieSheep

+0

"루트 요소가 여러 개 있습니다." 이 오류가 발생했습니다 –