2012-03-09 19 views
0

私は次のように見える要素を持つXMLファイルがあります。読み取りXML

<level> 
     <name>Name of Level 1</name> 
     <number>1</number> 
     <authorTime>8.55</authorTime> 
     <scoringTime>20</scoringTime> 
     <map width="19" height="15"><!--Level1--> 
      <row>0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0</row> 
      <row>2,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,2</row> 
      <row>2,-1,-1,-1,0,1,0,-1,2,-1,0,-1,-1,-1,-1,-1,0,-1,2</row> 
      <row>0,1,0,-1,2,-1,-1,-1,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,2</row> 
      <row>2,-1,-1,-1,2,-1,0,1,0,1,0,-1,0,0,-1,0,0,-1,2</row> 
      <row>2,-1,0,1,0,-1,-1,-1,2,-1,-1,-1,-1,2,-1,-1,2,-1,2</row> 
      <row>2,-1,-1,3,2,-1,0,-1,2,-1,0,-1,-1,2,-1,-1,2,-1,2</row> 
      <row>2,-1,0,1,0,0,0,-1,0,-1,0,1,1,0,-1,-1,2,-1,2</row> 
      <row>0,1,0,-1,-1,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,-1,2</row> 
      <row>2,-1,2,-1,-1,0,1,0,1,0,-1,0,1,0,1,1,0,-1,2</row> 
      <row>2,-1,0,0,-1,-1,-1,0,-1,2,-1,2,-1,0,-1,-1,2,-1,2</row> 
      <row>2,-1,2,-1,-1,0,-1,-1,-1,2,-1,2,-1,-1,-1,-1,2,-1,2</row> 
      <row>2,-1,0,0,-1,0,1,1,1,0,1,0,-1,0,1,1,0,-1,2</row> 
      <row>2,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2</row> 
      <row>0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0</row> 
     </map> 
    </level> 

を私はC#/ XNAで(XDocumentを使用したいです)を使って "地図"を2Dの長方形の配列(y、x)に読み込みます - この例の場合、int [15,19]になります。

私はジャグ配列を作成し、後で長方形のものに変換されると考えることができますすべて -

int[][] test = ((from level in xDoc.Descendants("level") 
       select (from map in level.Element("map") 
          select (from row in map.Elements("row") 
            select (int.Parse(row.Value))).ToArray()).ToArray())); 

のようなものをしかし、私は、私はどこかここにカンマで文字列分割を必要と知っています。とにかく、level.Element( "map")で「選択していません」というエラーが表示されます。

完成した配列は、{{0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0} {2、-1、-1、-1、-1、-1、-1,2、-1、-1、-1、-1、-1、-1、-1、-1 、-1,2}、...

誰でも手助けできますか?

--EDIT--

は、私が今持っている:私が欲しいデータを与えているが、「テスト」出力タイプのものとして、デバッグにまで見せている

var test = (from level in xDoc.Descendants("level") 
        select (from row in level.Elements("map").Elements("row") 
         select (from col in row.Value.Split(',') 
          select (int.Parse(col))).ToArray()).ToArray()); 

{System.Linq.Enumerable.WhereSelectEnumerableIterator<System.Xml.Linq.XElement,int[][]>}

近づいていますが、まだ正しくはありません。

+0

あなたはあなたの ')'をシャッフルする必要があります。私の編集を参照してください。 –

答えて

2

ちょうどそれ

select (from row in map.Elements("row").Value.Split(',') 
     select (int.Parse(row) ... 

作り、それがちょうどcolの代わりrow、それを呼び出すために意味をなさないかもしれません。

私は考えることができるすべては、ジャグ配列を作成し、変換後のなぜ

長方形のものに変換されますか?ギザギザの配列はうまく見えます。


編集

私はそれをテストました:

 var test = 
      from level in doc.Descendants("level") 
      select (from map in level.Elements("map") 
       select (from row in map.Elements("row") 
         select (from col in row.Value.Split(',') 
          select int.Parse(col)).ToArray()).ToArray()); 

あなたIEnumerabl<IEnumerable<int[][]>>(レベルとマップのリスト)を提供します。

したがって、test.First().First()が最初の配列です。

+0

他のコードは、私が長方形の配列として読んでいるデータを使用していますが、それは簡単なビットです:) – simonalexander2005

+0

ありがとうございました! – simonalexander2005