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

标签 c# xml arrays xna

<players>
    <player>
        <playerName>Guest</playerName>
        <playerID>1</playerID>
        <highScore>0</highScore>
        <levels>
            <level>
                <number>111</number>
                <bestTime>222</bestTime>
                <timesCompleted>333</timesCompleted>
            </level>
            <level>
                <number>112</number>
                <bestTime>113</bestTime>
                <timesCompleted>114</timesCompleted>
            </level>
        </levels>
    </player>
    <player>
        <playerName>Guest2</playerName>
        <playerID>2</playerID>
        <highScore>0</highScore>
        <levels>
            <level>
                <number>111</number>
                <bestTime>221</bestTime>
                <timesCompleted>441</timesCompleted>
            </level>
        </levels>
    </player>
</players>

嗨!

所以我有上面列出的 XML 结构,并尝试在 C#/XNA 中解析它,这样我就有变量中的名称、ID 和最高分,然后将级别数据(记住每个玩家有多个级别)转换为数组列表(目前),如下所示:

[[111,222,333][112,113,114]],[[111,221,441]]

或者是一个 3D 锯齿状数组,我猜。

到目前为止我有以下代码:

double[][] test = xDoc.Root.Elements("player").Elements("levels").Elements("level")
                  .Select(level => level.Elements().Select(x => (double)x).ToArray())
                  .ToArray();

但显然这是一个 2D 数组,并且似乎只给了我第一个玩家的结果 - 但我不知道如何概括它。有什么想法吗?

最佳答案

这将为您提供 3D 数组并遍历所有节点

  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();

关于c# - 将嵌套 XML 转换为 3d 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21503661/

相关文章:

c# - 将 jQuery 更新到 1.10.2 后,Ajax 调用后 jQuery 范围 slider 无法工作

c# - 跨平台 Xamarin 表单 : How to create PDF file in local storage

jquery - 使用 jQuery 读取 xml

c# - WPF 如何将 XML 与多个命名空间绑定(bind)

java - 在Java中将日期转换为长

javascript - 索引中存在间隙的数组是否会带来弥补其缺点的任何好处

c# - 将属性绑定(bind)到 View 的样式/资源字典

java - 有关不同编程语言中的 Hmac SHA256 的问题

java - 使用 Regex 修复 Java 中未转义的 XML 实体?

java - 无法显示正确的值