Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将嵌套XML转换为3d数组_C#_Xml_Arrays_Xna - Fatal编程技术网

C# 将嵌套XML转换为3d数组

C# 将嵌套XML转换为3d数组,c#,xml,arrays,xna,C#,Xml,Arrays,Xna,但很明显,这是一个2D数组,它似乎只给了我第一个玩家的结果——但我不知道如何推广它。有什么想法吗?这将为您提供3D阵列并遍历所有节点 double[][] test = xDoc.Root.Elements("player").Elements("levels").Elements("level") .Select(level => level.Elements().Select(x => (double)x).ToArray())

但很明显,这是一个2D数组,它似乎只给了我第一个玩家的结果——但我不知道如何推广它。有什么想法吗?

这将为您提供3D阵列并遍历所有节点

double[][] test = xDoc.Root.Elements("player").Elements("levels").Elements("level")
                  .Select(level => level.Elements().Select(x => (double)x).ToArray())
                  .ToArray();
var playersNode=myDocument.ChildNodes.OfType()。其中(nodeVariant=>nodeVariant.Name==“players”).First();
var levelsNode=playersNode.ChildNodes.OfType().Select(nodeVariant=>nodeVariant.ChildNodes.OfType().Where(nodeVariant1=>nodeVariant1.Name==“levels”);
double[][]output=levelsNode.Select(o=>o.ChildNodes.OfType().Select(o1=>new[]{Convert.ToDouble(o.Attributes[“number]”)、Convert.ToDouble(o.Attributes[“timecompleted”])、Convert.ToDouble(o.Attributes[“timecompleted”]).ToArray();

我相信这会产生您想要的结果:

  var playersNode = myDocument.ChildNodes.OfType<XmlElement>().Where(nodeVariant => nodeVariant.Name == "players").First();
  var levelsNode  =   playersNode.ChildNodes.OfType<XmlElement>().Select(nodeVariant => nodeVariant.ChildNodes.OfType<XmlElement>().Where(nodeVariant1 => nodeVariant1.Name == "levels"));
  double[][][] output = levelsNode.Select(o => o.ChildNodes.OfType<XmlElement>().Select(o1 => new[] { Convert.ToDouble(o.Attributes["number"]), Convert.ToDouble(o.Attributes["bestTime"]), Convert.ToDouble(o.Attributes["timesCompleted"]) }).ToArray()).ToArray();
结果如下所示:


你不在乎关卡是为哪个玩家而设,只想把所有玩家的关卡放到一个多维数组中?不,我希望关卡数据与正确的玩家相关联。最后,我会将信息放入一个结构列表中,其中的结构是PlayerData,包含玩家的姓名和ID,以及他们玩过的关卡和这些关卡的时间。好吧,看看我的答案是否符合你的需要。太好了!非常感谢!事实证明,在我屈服并在这里提问之前一个小时,我自己确实到达了那里,但我读错了xml文件(!)
  var playersNode = myDocument.ChildNodes.OfType<XmlElement>().Where(nodeVariant => nodeVariant.Name == "players").First();
  var levelsNode  =   playersNode.ChildNodes.OfType<XmlElement>().Select(nodeVariant => nodeVariant.ChildNodes.OfType<XmlElement>().Where(nodeVariant1 => nodeVariant1.Name == "levels"));
  double[][][] output = levelsNode.Select(o => o.ChildNodes.OfType<XmlElement>().Select(o1 => new[] { Convert.ToDouble(o.Attributes["number"]), Convert.ToDouble(o.Attributes["bestTime"]), Convert.ToDouble(o.Attributes["timesCompleted"]) }).ToArray()).ToArray();
int[][][] result = xDoc
    .Root
    .Elements("player")
    .Select(p => p
        .Elements("levels")
        .Elements("level")
        .Select(l => l
            .Elements()
            .Select(e => int.Parse(e.Value))
            .ToArray()
        ).ToArray()
    ).ToArray();