C# 将嵌套XML转换为3d数组
但很明显,这是一个2D数组,它似乎只给了我第一个玩家的结果——但我不知道如何推广它。有什么想法吗?这将为您提供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())
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();