DataTable.WriteXML和子节点

时间:2011-08-04 17:50:52

标签: c# xml dataset writexml

我有以下代码片段:

        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节点内的任何想法;而不是每个节点有2个节点?

1 个答案:

答案 0 :(得分:2)

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元素)。

您怎么看?