我有一个带有Elements的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中)将“map”读入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”)上得到一个“select not found”错误。
我完成的数组应该看起来像{{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},...
有人可以帮忙吗?
- 编辑 -
我现在有:
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[][]>}
越来越近,但仍然不太正确!
答案 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()
是你的第一个数组。