DataTable.WriteXML и дочерние узлы - PullRequest
       26

DataTable.WriteXML и дочерние узлы

1 голос
/ 04 августа 2011

У меня есть следующий фрагмент кода:

        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 Ответ

2 голосов
/ 05 августа 2011
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 все еще отсутствует).

Что ты думаешь?

...