【发布时间】:2012-03-09 22:55:41
【问题描述】:
我有一个 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()));
但我知道我需要在某个地方用逗号分隔字符串;无论如何,我在 level.Element("map") 上收到“未找到选择”错误。
我完成的数组应该看起来像 {{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());
这给了我想要的数据,但“测试”输出在调试中显示为类型:{System.Linq.Enumerable.WhereSelectEnumerableIterator<System.Xml.Linq.XElement,int[][]>}
越来越近了,但还是不太对!
【问题讨论】:
-
你必须改变你的
)。查看我的编辑。
标签: c# xml linq multidimensional-array linq-to-xml