【问题标题】:Writing Grid 2d array to file using XML in C#在 C# 中使用 XML 将 Grid 2d 数组写入文件
【发布时间】:2019-04-30 16:21:15
【问题描述】:

我有一个巨大的二维数组,看起来像

Map grid = new int[,] { {1,1,1,1,1,1},{0,0,0,0,0,0},{2,2,2,2,2,2}}; 

我用它来描述一个单一游戏项目的网格。 我正在为我正在开发的游戏创建一个关卡编辑器, 关卡编辑器需要将使用关卡编辑器后创建的新网格写入外部文件。 建议我使用 XML 将我的网格写入外部文件。 稍后,我将不得不读取文件并将数据发送到新的 地图网格构造函数。

我是 XML 新手,还没有找到正确编写它的好方法。 我正在使用 Visual Studio Community 2017,C#。 非常感谢您的帮助!

【问题讨论】:

  • 您将数据写入 XML 就像您将任何其他数据写入 XML 一样:您提出/定义 XML 数据结构/布局(或获得需要遵守的 XML 数据结构/布局),然后根据该 XML 数据结构写入/序列化数据。我不能再说什么了,因为我不知道您想要/需要使用的 XML 数据结构,因此不知道您所说的“正确编写它是什么意思”。 编辑并改进您的问题,添加有关您要编写的 XML 数据结构的信息,以及您正在尝试的与 XML 相关的代码...
  • 下面的代码运行良好,很抱歉没有提供太多细节。我实际上需要的是在我的二维数组上运行一个循环并将其写入文件。现在我需要将它读回一个 int[,]
  • 出于好奇,您知道为什么向您推荐 XML 吗?在大小、速度和实现复杂性方面,还有其他文件格式更适合这种情况。
  • 好吧,也许你是对的。但是,通过标签/属性/id分割文本文件不是更容易吗?

标签: c# xml grid monogame


【解决方案1】:

尝试以下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;


namespace ConsoleApplication110
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            int[,] grid = new int[,] { { 1, 1, 1, 1, 1, 1 }, { 0, 0, 0, 0, 0, 0 }, { 2, 2, 2, 2, 2, 2 } };

            string xml = "<Data></Data>";

            XDocument doc = XDocument.Parse(xml);
            XElement data = doc.Root;

            for (int row = 0; row <= grid.GetUpperBound(0); row++)
            {
                XElement xRow = new XElement("Row");
                data.Add(xRow);
                for (int col = 0; col <= grid.GetUpperBound(1); col++)
                {
                    XElement xCol = new XElement("Column", grid[row, col]);
                    xRow.Add(xCol);
                }
            }
            data.Add(new XElement("music", new object[] {
                new XElement("GEVAs_main_sountrack"),
                new XElement("RonWalking")            
            }));
            doc.Save(FILENAME);

            XDocument newDoc = XDocument.Load(FILENAME);

            int[][] newGrid = newDoc.Descendants("Row").Select(x => x.Elements("Column").Select(y => (int)y).ToArray()).ToArray();
        }
    }
}

【讨论】:

  • 哇!感谢您 !效果太棒了,我太棒了:)
  • 给我一个 XML 文件的样本。
  • 11111 1000000222222
  • imgur.com/AOrsiJK 这是图片的链接!(xml示例)
  • 谢谢你,我已经有了,我需要将文件读入网格数组,其他人转到字符串:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
相关资源
最近更新 更多