请注意,此问题与跨表/数据集的父子数据嵌套无关。
在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>
答案 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());
}