You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在XML中按表名嵌套ADO.NET DataSet的表数据?

嘿,我来帮你把这个ADO.NET DataSet导出XML的问题讲明白!

ADO.NET DataSet导出XML:ColumnMapping的影响

先明确你的场景

数据库调用返回两个独立查询的结果到DataSet:
SELECT name, surname FROM [Users];
SELECT color FROM [Colors];
你用GetXml()或者WriteXml()导出XML,并且设置了ds.Tables[0].ColumnMapping = MappingType.Attribute

默认的导出行为(不设置ColumnMapping)

默认情况下,DataTable的列会被映射成XML元素,导出的XML大概长这样:

<NewDataSet>
  <Users>
    <name>张三</name>
    <surname>张</surname>
  </Users>
  <Users>
    <name>李四</name>
    <surname>李</surname>
  </Users>
  <Colors>
    <color>Red</color>
  </Colors>
  <Colors>
    <color>Blue</color>
  </Colors>
</NewDataSet>

设置MappingType.Attribute后的变化

当你给第一个表(也就是Users表,对应Tables[0])设置列映射为Attribute后,这个表的所有列都会变成XML元素的属性,而第二个表(Colors)还是保持默认的元素映射,最终导出的XML会变成这样:

<NewDataSet>
  <Users name="张三" surname="张" />
  <Users name="李四" surname="李" />
  <Colors>
    <color>Red</color>
  </Colors>
  <Colors>
    <color>Blue</color>
  </Colors>
</NewDataSet>

完整的代码示例

// 假设MyLogic.GetDataSet()已经返回包含两个表的DataSet
DataSet ds = MyLogic.GetDataSet();

// 给第一个表(Users)设置列映射为Attribute
ds.Tables[0].ColumnMapping = MappingType.Attribute;

// 导出成XML字符串
string xmlOutput = ds.GetXml();

// 或者直接写入到文件
ds.WriteXml(@"C:\your-output-path.xml");

几个关键细节要注意

  • ColumnMapping针对单个DataTable独立设置的,你可以给不同的表配置不同的映射方式,比如一个用Attribute,一个用Element
  • 如果想让DataSet里所有表都用Attribute映射,直接遍历设置就行:
    foreach(DataTable table in ds.Tables)
    {
        table.ColumnMapping = MappingType.Attribute;
    }
    
  • MappingType还有其他选项:MappingType.Element(默认值)、MappingType.Hidden(该列不导出到XML)、MappingType.SimpleContent(列值作为元素的文本内容)

内容的提问来源于stack exchange,提问作者EvilDr

火山引擎 最新活动