У меня есть 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>
И я хочу использовать XDocument (в C # / XNA), чтобы прочитать «карту» в 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()));
Но я знаю, что где-то здесь нужно разделить строку запятыми; и в любом случае я получаю ошибку «выберите не найден» на уровне. Элемент («карта»).
Мой законченный массив должен выглядеть так: {{0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0}, {2, -1, -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());
, который дает мне нужные мне данные, но вывод "test" отображается в отладке как: {System.Linq.Enumerable.WhereSelectEnumerableIterator<System.Xml.Linq.XElement,int[][]>}
Становится ближе, но все же не совсем верно!