C# xml : How to save nested rows

标签 c# xml format nested save

我是 xml 的新手,我正在尝试以下列格式保存一些内容:

<?xml version="1.0" standalone="yes"?>
<NewDataSet>
  <brickTable>
    <value>23039</value>
    <Tile>Brick</Tile>
    <X>18400</X>
    <Y>64</Y>
    <items>
          <itemType>Type1</itemType> 
    </items>
    <items>
           <itemType>Type5</itemType>
    </items>
  </brickTable>
</NewDataSet>

我希望 成为如图所示的 bricktable 的一部分,但我不知道该怎么做。我目前有上面的格式,但没有任何部分。

我现在的代码如下:

            System.Data.DataSet ds;
            ds = new DataSet();

            System.Data.DataTable tile_table;
            tile_table = new DataTable("tiles");

            //add an auto increment column
            DataColumn column1 = new DataColumn();
            column1.DataType = System.Type.GetType("System.Int32");
            column1.ColumnName = "value";
            column1.AutoIncrement = true;
            tile_table.Columns.Add(column1);

            //add index key
            DataColumn[] keys = new DataColumn[1];
            keys[0] = column1;
            tile_table.PrimaryKey = keys;

            //tilemap data columns
            DataColumn TileType = new DataColumn();
            TileType.DataType = System.Type.GetType("System.String");
            TileType.ColumnName = "Tile";
            tile_table.Columns.Add(TileType);

            DataColumn X = new DataColumn();
            X.DataType = System.Type.GetType("System.Int32");
            X.ColumnName = "X";
            tile_table.Columns.Add(X);

            DataColumn Y = new DataColumn();
            Y.DataType = System.Type.GetType("System.Int32");
            Y.ColumnName = "Y";
            tile_table.Columns.Add(Y);

            DataRow row = tile_table.NewRow();
            row["value"] = count;
            row["Tile"] = tileListRear[index].tileType.ToString();
            row["X"] = tileListRear[index].X;
            row["Y"] = tileListRear[index].Y;
            row["Layer"] = NewMapEditor.Layer.Rear.ToString();
            tile_table.Rows.Add(row);

            //save xml file
            ds.Tables.Add(infoTable);
            ds.Tables.Add(tile_table);
            ds.WriteXml(g_filename);

感谢您的帮助!

最佳答案

您无法通过使用“DataSet.WriteXML”获得这样的 XML 文件。

您可以实现您自己的自定义 WriteXML 函数,该函数派生自“ISerializeable”接口(interface)。如果您正在构建数据库或想要对数据的序列化方式进行大量控制,这可能是个好主意。这是一个 example on CodeProject .

您真的需要一个 DataTable 有多糟糕?你打算使用 SQL 吗?你需要关系吗?

如您所说,如果您的目标是生成与您的示例完全匹配的 XML 文件,您可能希望首先将数据存储在一个类中:

public class BrickTable
{
    public int      Value   { get; set; }
    public string   Title   { get; set; }
    public int      X       { get; set; }
    public int      Y       { get; set; }

    [XmlArrayItem("ItemType")]
    public List<string> Items   { get; set; }

    public BrickTable()
    {
    }
}


注意:Item可以是字符串列表,Type列表,也可以是你自定义的类:

public class Item
{
    public string   Name    { get; set; }
    public string   Type    { get; set; }
    public int      Value   { get; set; }   
    public Item()
    {
    }
}


及其序列化函数:

public void SerializeObject(string filename,object obj)
{
    using(StreamWriter streamWriter = new StreamWriter(filename))
    {
        XmlSerializer xmlSerializer = new XmlSerializer(obj.GetType());
        xmlSerializer.Serialize(streamWriter,obj);
    }
}


用法:

void Test() 
{
    BrickTable bTable = new BrickTable();

    bTable.Title    = "";
    bTable.Value    = 23039;
    bTable.X            = 18400;
    bTable.Y            = 64;


    List<string> items = new List<string>();
    items.Add("Item1");
    items.Add("Item5");

    bTable.Items = items;

    SerializeObject("BrickSet.xml",bTable);
}

最后,您可以创建一个函数来获取数据行并返回一个已填充的 BrickTable 类,或者您可以使用反射将类转换为 DataTable,as shown here .

所以问题是,您有多迫切需要以这种方式格式化您的 XML?是不是也必须是DataTable的形式?

关于C# xml : How to save nested rows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17287052/

相关文章:

c# - Page.Validate 与 Page.IsValid

c# - 远程方法调用的 .NET 标准是什么?

C# Datatable 按两个字段分组,将 4 个字段放入数组中

java - 为什么 DocumentBuilder.parse() 不起作用

java - 此数据的格式名称是什么?

c# - WindowsPrincipal.IsInRole 不适用于 IIS 7/Windows Server 2K8,但适用于 IIS 6/Win Server 2K3

c# - 无需删除 XML 声明即可读取 XML 文件的内容

java - 关于 ImageButtons 滞后且不合适的 2 个问题

c# - 格式字符串/数字 "NNNNN"

java - 检查字符串是否具有特定格式?