我有一个dataset,里面有两张表,两个表是父子关系。
目录和产品, 一个目录对应多个产品。
我想输出XML, 使用dataset.writeXML 方法。
在dataset里面应该如何设定这样的关系,
或者写XML的时候应该怎么处理。
才能保证写出的XML文件是这样的:
<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>
<Products>
<CategoryID>2</CategoryID>
<ProductID>5</ProductID>
<ProductName>Chef Anton's Gumbo Mix</ProductName>
</Products>
<Products>
<CategoryID>2</CategoryID>
<ProductID>6</ProductID>
<ProductName>Grandma's Boysenberry Spread</ProductName>
</Products>
</Categories>
</NewDataSet>
目录和产品, 一个目录对应多个产品。
我想输出XML, 使用dataset.writeXML 方法。
在dataset里面应该如何设定这样的关系,
或者写XML的时候应该怎么处理。
才能保证写出的XML文件是这样的:
<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>
<Products>
<CategoryID>2</CategoryID>
<ProductID>5</ProductID>
<ProductName>Chef Anton's Gumbo Mix</ProductName>
</Products>
<Products>
<CategoryID>2</CategoryID>
<ProductID>6</ProductID>
<ProductName>Grandma's Boysenberry Spread</ProductName>
</Products>
</Categories>
</NewDataSet>
解决方案 »
- C# 本页面调用其他页面的事件
- 取string ,存入字节数组,如何做?
- 关于richTextBox1.Find()小问题
- 关于button的tabindex问题
- Page_Load时间中不存在名称或定义的问题
- 求时间进度条代码
- xml转成dataset之后,能用ado.net中ExecuteNonQuery 和sql语句访问、修改DataSet.Tables[0]中的记录吗?
- Append如何从下一行开始追加?
- %%%%%%%%%%%%%50分快来人啊,简单的问题,循环输出几行数据%%%%%%%%%%%%
- C#能做低层的东西吗?如,网络安全的软件,杀毒等等。
- 请问C#中有没有类似C中的memcpy函数呀?
- 请问怎样使用datagrid的模板列
只能用自己写的的方法去实现了
限定义架构,再用这个方法导入
System.Data.DataSet ds = new DataSet("test");
ds.Tables.Add("a");
ds.Tables[0].Columns.Add("a1");
ds.Tables[0].Columns.Add("a2");
System.Data.DataRow r1 = ds.Tables[0].NewRow();
r1.BeginEdit();
r1[0] = "1";
r1[1] = "aa";
r1.EndEdit();
ds.Tables[0].Rows.Add(r1);
r1 = ds.Tables[0].NewRow();
r1.BeginEdit();
r1[0] = "2";
r1[1] = "bb";
r1.EndEdit();
ds.Tables[0].Rows.Add(r1);
System.Data.DataColumn c1 = ds.Tables[0].Columns[0];
ds.Tables.Add("b");
ds.Tables[1].Columns.Add("b1");
ds.Tables[1].Columns.Add("b2");
ds.Tables[1].Columns.Add("b3");
System.Data.DataRow r2 = ds.Tables[1].NewRow();
r2.BeginEdit();
r2[0] = "1";
r2[1] = "b11";
r2[2] = "b12";
r2.EndEdit();
ds.Tables[1].Rows.Add(r2);
r2 = ds.Tables[1].NewRow();
r2.BeginEdit();
r2[0] = "1";
r2[1] = "b21";
r2[2] = "b22";
r2.EndEdit();
ds.Tables[1].Rows.Add(r2);
r2 = ds.Tables[1].NewRow();
r2.BeginEdit();
r2[0] = "1";
r2[1] = "b31";
r2[2] = "b32";
r2.EndEdit();
ds.Tables[1].Rows.Add(r2);
r2 = ds.Tables[1].NewRow();
r2.BeginEdit();
r2[0] = "2";
r2[1] = "b41";
r2[2] = "b42";
r2.EndEdit();
ds.Tables[1].Rows.Add(r2);
System.Data.DataColumn c2 = ds.Tables[1].Columns[0];
ds.Relations.Add("r1",c1,c2);
ds.Relations[0].Nested=true;
MessageBox.Show(ds.GetXml());
主要是设ds.Relations.Add("r1",c1,c2);
ds.Relations[0].Nested=true;
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>
使用下面测试代码,
/*------------------------------------------------
http://blog.csdn.net/zhzuo
--------------------------------------------------*/
namespace Zhzuo.VS2005Test.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>