我得到了以下代码片段:
var dataSet = new DataSet("Data");
var table = GetCustomerTable();
var orgTable = GetOrganizationTable();
dataSet.Tables.Add(table);
dataSet.Tables.Add(orgTable);
var relation = new DataRelation("CustomerMembership", dataSet.Tables["Customers"].Columns["CustomerId"], dataSet.Tables["Organizations"].Columns["CustomerId"])
{Nested = true};
dataSet.Relations.Add(relation);
dataSet.WriteXml(@"C:MyFeed.xml");
这给了我以下结果:
<Customers>
<CustomerId>272408857</CustomerId>
<snip>
<Organizations>
<OrganizationName>Org1</OrganizationName>
</Organizations>
<Organizations>
<OrganizationName>Org2</OrganizationName>
</Organizations>
</Customers>
我要找的是这样的东西:
<Customers>
<CustomerId>272408857</CustomerId>
<snip>
<Organizations>
<OrganizationName>Org1</OrganizationName>
<OrganizationName>Org2</OrganizationName>
</Organizations>
</Customers>
关于如何将OrganizationName
嵌套在一个Organization
节点内的任何想法;而不是有两个节点,每个节点有一个值?
DataColumn dc = orgTable.Columns["OrganizationName"];
dc.ColumnMapping = MappingType.Attribute;
将其添加到代码中会输出以下内容:
<Customers>
<CustomerId>272408857</CustomerId>
<snip>
<Organizations OrganizationName = "Org1"/>
<Organizations OrganizationName = "Org2"/>
</Customers>
这并不完全是您所需要的,但我认为您无法使用.net工具在表标记中收集联接的子节点。您可能需要自己转换xml。
您也可以将DataTable重命名为"Organization",这样您就有了一个Organization
元素的列表(尽管仍然缺少父Organizations
元素(。
你觉得怎么样?