2011-08-04 55 views
1

我有下面的代码片段: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任何想法嵌套一个内0节点;而不是有两个节点各有一个值?

+0

你或许可以使用属性,比如'' – Rahul

回答

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

您认为如何?

+0

是的;我无法找到用WriteXml方法获得此方法的方法。我最终使用了一个小的Linq到XML来按照我想要的方式得到它。 –