如何在XML中按表名嵌套DataSet表数据?

时间:2018-03-20 10:44:58

标签: asp.net ado.net

请注意,此问题与跨表/数据集的父子数据嵌套无关。

在ADO.Net DataSet中,有两种方法可以将数据提取为XML(我正在使用GetXml,但WriteXml生成相同的数据)。假设数据库调用将这两个语句的结果作为DataSet返回:

SELECT name, surname FROM [Users];
SELECT color FROM [Colors];

然后我按如下方式导出数据......

DataSet ds = MyLogic.GetDataSet();
ds.Tables[0].ColumnMapping = MappingType.Attribute;
ds.Tables[1].ColumnMapping = MappingType.Attribute;
string s = ds.GetXml();

数据表达如下:

<NewDataSet>
   <Table0 name="Bob" surname="Smith" />
   <Table0 name="John" surname="Doe" />
   <Table0 name="Jane" surname="Doe" />
   <Table1 color="Red" />
   <Table1 color="Blue" />
<NewDataSet>

是否可以使用嵌套的XML节点来区分每个表结构?像这样:

<NewDataSet>
   <Table0>
     <row name="Bob" surname="Smith" />
     <row name="John" surname="Doe" />
     <row name="Jane" surname="Doe" />
   </Table0>
   <Table1>
     <row color="Red" />
     <row color="Blue" />
   </Table1>
<NewDataSet>

1 个答案:

答案 0 :(得分:0)

尝试回答我自己的问题,而其他人可能有更好的解决方案。如果发布更好的答案,将删除。

原油并包含不必要的标签,但可以清理......

string s = string.Empty;
using (StringWriter sw = new StringWriter())
{
    sw.Write("<ExportedData>");
    foreach (DataTable dt in ds.Tables)
    {
        sw.Write(string.Format("<{0}>", dt.TableName));
        dt.WriteXml(sw, XmlWriteMode.IgnoreSchema, false);
        sw.Write(string.Format("</{0}>", dt.TableName));
    }
    sw.Write("</ExportedData>");
    s = string.Concat(s, sw.ToString());
}