DataTable.WriteXML和子节点

本文关键字:子节点 WriteXML DataTable | 更新日期: 2023-09-27 18:04:36

我得到了以下代码片段:

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

DataTable.WriteXML和子节点

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

你觉得怎么样?