关键是设置
DataRelation.Nested 属性,如果 DataRelation 对象嵌套,则为 true;否则为 false。
无论输入的xml文件是下面的其中之一,
(1)第一种方式为嵌套
<NewDataSet>
<Categories>
<CategoryID>1</CategoryID>
<CategoryName>Beverages</CategoryName>
<Products>
<CategoryID>1</CategoryID>
<ProductID>1</ProductID>
<ProductName>Chai</ProductName>
</Products>
<Products>
<CategoryID>1</CategoryID>
<ProductID>2</ProductID>
<ProductName>Chang</ProductName>
</Products>
</Categories>
<Categories>
<CategoryID>2</CategoryID>
<CategoryName>Condiments</CategoryName>
<Products>
<CategoryID>2</CategoryID>
<ProductID>3</ProductID>
<ProductName>Aniseed Syrup</ProductName>
</Products>
<Products>
<CategoryID>2</CategoryID>
<ProductID>4</ProductID>
<ProductName>Chef Anton's Cajun Seasoning</ProductName>
</Products>
</Categories>
</NewDataSet>
(2)第二种方式为非嵌套
<NewDataSet>
<Categories>
<CategoryID>1</CategoryID>
<CategoryName>Beverages</CategoryName>
</Categories>
<Categories>
<CategoryID>2</CategoryID>
<CategoryName>Condiments</CategoryName>
</Categories>
<Products>
<CategoryID>1</CategoryID>
<ProductID>1</ProductID>
<ProductName>Chai</ProductName>
</Products>
<Products>
<CategoryID>1</CategoryID>
<ProductID>2</ProductID>
<ProductName>Chang</ProductName>
</Products>
<Products>
<CategoryID>2</CategoryID>
<ProductID>3</ProductID>
<ProductName>Aniseed Syrup</ProductName>
</Products>
<Products>
<CategoryID>2</CategoryID>
<ProductID>4</ProductID>
<ProductName>Chef Anton's Cajun Seasoning</ProductName>
</Products>
</NewDataSet>
使用下面测试代码
/*------------------------------------------------
https://blog.csdn.net/vs880
--------------------------------------------------*/
namespace vs880.Test.ConsoleTest
{
class Program
{
static void Main(string[] args)
{
DataSet ds = new DataSet("NewDataSet");
DataTable CategoryDT = new DataTable("Categories");//目录表
CategoryDT.Columns.Add("CategoryID", typeof(int));//PK
CategoryDT.Columns.Add("CategoryName", typeof(string));
CategoryDT.PrimaryKey = new DataColumn[] { CategoryDT.Columns["CategoryID"] };
ds.Tables.Add(CategoryDT);
DataTable ProductDT = new DataTable("Products");//目录表
ProductDT.Columns.Add("ProductID", typeof(int));//PK
ProductDT.Columns.Add("ProductName", typeof(string));
ProductDT.Columns.Add("CategoryID", typeof(int));//FK
ProductDT.PrimaryKey = new DataColumn[] { ProductDT.Columns["ProductID"] };
ds.Tables.Add(ProductDT);
DataRelation dr = new DataRelation("关系名称",
ds.Tables["Categories"].Columns["CategoryID"], ds.Tables["Products"].Columns["CategoryID"], true);
dr.Nested = true;//设置DataRelation 对象嵌套。
ds.Relations.Add(dr);
ds.ReadXml("c:\\test_in.xml");
ds.WriteXml("c:\\test_out.xml");
//Console.ReadLine();
}
}
}
最终输出结果都由dr.Nested = true;生成嵌套输出。
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<Categories>
<CategoryID>1</CategoryID>
<CategoryName>Beverages</CategoryName>
<Products>
<ProductID>1</ProductID>
<ProductName>Chai</ProductName>
<CategoryID>1</CategoryID>
</Products>
<Products>
<ProductID>2</ProductID>
<ProductName>Chang</ProductName>
<CategoryID>1</CategoryID>
</Products>
</Categories>
<Categories>
<CategoryID>2</CategoryID>
<CategoryName>Condiments</CategoryName>
<Products>
<ProductID>3</ProductID>
<ProductName>Aniseed Syrup</ProductName>
<CategoryID>2</CategoryID>
</Products>
<Products>
<ProductID>4</ProductID>
<ProductName>Chef Anton's Cajun Seasoning</ProductName>
<CategoryID>2</CategoryID>
</Products>
</Categories>
</NewDataSet>