DataTable.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 ответ
Решение
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
элемент хотя).
Как вы думаете?