pkID CateName CatePath
1 首页 ,0,
2 新闻 ,0,
3 产品 ,0,
4 案例 ,0,
5 国际 ,0,2,
6 国内 ,0,2,
7 本地 ,0,2,
8 行业 ,0,2,1.我使用的是递归查询(因为树的级数是无限的)。
2.先构造一个DataTable:
DataTable dtx = new DataTable("CateList");
dtx.Columns.Add(new DataColumn("pkID", typeof(int)));
dtx.Columns.Add(new DataColumn("CateName", typeof(string)));
dtx.Columns.Add(new DataColumn("CatePath", typeof(string)));
dtx.Columns.Add(new DataColumn("CateList", typeof(DataTable)));//这里方便装入下一级的DataTable。
3.数据库中查询出来以后,装入DataTable。
4.将DataTable转化为DataSet。
5.用DataSet.WriteXML()输出XML;结果是,顶级的没有Schema,但子级的Schema不能控制。
请问是什么原因?
还有无其它办法?
1 首页 ,0,
2 新闻 ,0,
3 产品 ,0,
4 案例 ,0,
5 国际 ,0,2,
6 国内 ,0,2,
7 本地 ,0,2,
8 行业 ,0,2,1.我使用的是递归查询(因为树的级数是无限的)。
2.先构造一个DataTable:
DataTable dtx = new DataTable("CateList");
dtx.Columns.Add(new DataColumn("pkID", typeof(int)));
dtx.Columns.Add(new DataColumn("CateName", typeof(string)));
dtx.Columns.Add(new DataColumn("CatePath", typeof(string)));
dtx.Columns.Add(new DataColumn("CateList", typeof(DataTable)));//这里方便装入下一级的DataTable。
3.数据库中查询出来以后,装入DataTable。
4.将DataTable转化为DataSet。
5.用DataSet.WriteXML()输出XML;结果是,顶级的没有Schema,但子级的Schema不能控制。
请问是什么原因?
还有无其它办法?
1 首页 ,0,
2 新闻 ,0,
3 产品 ,0,
4 案例 ,0,
5 国际 ,0,2,
6 国内 ,0,2,
7 本地 ,0,2,
8 行业 ,0,2,
LZ 下面几行的数据多一列了
找到一遍文章,但是VB的,看不懂,谁能把它翻译成C#的?谢谢。
<CateList>
<pkID>1</pkID>
<CateName>首页</CateName>
<CatePath>,0,</CatePath>
</CateList>
<CateList>
<pkID>2</pkID>
<CateName>新闻</CateName>
<CatePath>,0,</CatePath>
<CateList>
<pkID>5</pkID>
<CateName>国际</CateName>
<CatePath>,0,2,</CatePath>
</CateList>
<CateList>
<pkID>6</pkID>
<CateName>国内</CateName>
<CatePath>,0,2,</CatePath>
</CateList>
<CateList>
<pkID>7</pkID>
<CateName>本地</CateName>
<CatePath>,0,2,</CatePath>
</CateList>
<CateList>
<pkID>8</pkID>
<CateName>行业</CateName>
<CatePath>,0,2,</CatePath>
</CateList>
</CateList>
<CateList>
<pkID>3</pkID>
<CateName>产品</CateName>
<CatePath>,0,</CatePath>
</CateList>
<CateList>
<pkID>4</pkID>
<CateName>案例</CateName>
<CatePath>,0,</CatePath>
</CateList>
朋友们是否可以做一个示范?谢谢。
这文章不难啊!
创建二个DataTable表,并加入DataSet中,同时在两个DataTable表建立关系。
DataSet ds = new DataSet();
//建立表
DataTable dtsb = new DataTable("SB");
DataTable dtsx = new DataTable("SX");
//SB主表,创建列
dtsb.Columns.Add(new DataColumn("学号"));
dtsb.Columns.Add(new DataColumn("姓名"));
dtsb.Columns.Add(new DataColumn("性别"));
dtsb.Columns.Add(new DataColumn("总成绩"));
//SX从表,创建列
dtsx.Columns.Add(new DataColumn("学号"));
dtsx.Columns.Add(new DataColumn("姓名"));
dtsx.Columns.Add(new DataColumn("科目"));
dtsx.Columns.Add(new DataColumn("分成绩"));
//主表数据,创建行
dtsb.Rows.Add("1", "陈一", "男", "100");
dtsb.Rows.Add("2", "王二", "女", "90");
dtsb.Rows.Add("3", "李三", "女", "80");
dtsb.Rows.Add("4", "赵四", "男", "70");
//从表数据,创建行
dtsx.Rows.Add("1", "陈一", "数学", "50");
dtsx.Rows.Add("2", "王二", "数学", "90");
dtsx.Rows.Add("3", "李三", "历史", "50");
dtsx.Rows.Add("3", "李三", "地理", "30");
dtsx.Rows.Add("4", "赵四", "英文", "70");
ds.Tables.Add(dtsb);
ds.Tables.Add(dtsx);
ds.Relations.Add("SBX", ds.Tables["SB"].Columns["学号"], ds.Tables["SX"].Columns["学号"]);
ds.GetXml();
uc.WriteXml(ds);
<?xml version="1.0" encoding="utf-8" ?>
- <NewDataSet>
- <SB>
<学号>1</学号>
<姓名>陈一</姓名>
<性别>男</性别>
<总成绩>100</总成绩>
</SB>
- <SB>
<学号>2</学号>
<姓名>王二</姓名>
<性别>女</性别>
<总成绩>90</总成绩>
</SB>
- <SB>
<学号>3</学号>
<姓名>李三</姓名>
<性别>女</性别>
<总成绩>80</总成绩>
</SB>
- <SB>
<学号>4</学号>
<姓名>赵四</姓名>
<性别>男</性别>
<总成绩>70</总成绩>
</SB>
- <SX>
<学号>1</学号>
<姓名>陈一</姓名>
<科目>数学</科目>
<分成绩>50</分成绩>
</SX>
- <SX>
<学号>2</学号>
<姓名>王二</姓名>
<科目>数学</科目>
<分成绩>90</分成绩>
</SX>
- <SX>
<学号>3</学号>
<姓名>李三</姓名>
<科目>历史</科目>
<分成绩>50</分成绩>
</SX>
- <SX>
<学号>3</学号>
<姓名>李三</姓名>
<科目>地理</科目>
<分成绩>30</分成绩>
</SX>
- <SX>
<学号>4</学号>
<姓名>赵四</姓名>
<科目>英文</科目>
<分成绩>70</分成绩>
</SX>
</NewDataSet>
<?xml version="1.0" encoding="utf-8"?>
<NewDataSet>
<SB>
<学号>1</学号>
<姓名>陈一</姓名>
<性别>男</性别>
<总成绩>100</总成绩>
<成绩>
<数学>50</数学>
</成绩>
</SB>
<SB>
<学号>2</学号>
<姓名>王二</姓名>
<性别>女</性别>
<总成绩>90</总成绩>
<成绩>
<数学>90</数学>
</成绩>
</SB>
<SB>
<学号>3</学号>
<姓名>李三</姓名>
<性别>女</性别>
<总成绩>80</总成绩>
<成绩>
<历史>50</历史>
<地理>30</地理>
</成绩>
</SB>
<SB>
<学号>4</学号>
<姓名>赵四</姓名>
<性别>男</性别>
<总成绩>70</总成绩>
<成绩>
<英文>70</英文>
</成绩>
</SB>
</NewDataSet>
//建立数据集对象,像数据库一样
DataSet ds = new DataSet();
//建立表
DataTable dtsb = new DataTable("SB");
DataTable dtsx = new DataTable("SX");
//SB主表,创建列
dtsb.Columns.Add(new DataColumn("学号"));
dtsb.Columns.Add(new DataColumn("姓名"));
dtsb.Columns.Add(new DataColumn("性别"));
dtsb.Columns.Add(new DataColumn("总成绩"));
//SX从表,创建列
dtsx.Columns.Add(new DataColumn("学号"));
dtsx.Columns.Add(new DataColumn("姓名"));
dtsx.Columns.Add(new DataColumn("科目"));
dtsx.Columns.Add(new DataColumn("分成绩"));
//主表数据,创建行
dtsb.Rows.Add("1", "陈一", "男", "100");
dtsb.Rows.Add("2", "王二", "女", "90");
dtsb.Rows.Add("3", "李三", "女", "80");
dtsb.Rows.Add("4", "赵四", "男", "70");
//从表数据,创建行
dtsx.Rows.Add("1", "陈一", "数学", "50");
dtsx.Rows.Add("2", "王二", "数学", "90");
dtsx.Rows.Add("3", "李三", "历史", "50");
dtsx.Rows.Add("3", "李三", "地理", "30");
dtsx.Rows.Add("4", "赵四", "英文", "70");
ds.Tables.Add(dtsb);
ds.Tables.Add(dtsx);
ds.Relations.Add("SBX", ds.Tables["SB"].Columns["学号"], ds.Tables["SX"].Columns["学号"]);
XmlDataDocument xmlDoc = new XmlDataDocument(ds);
xmlDoc.Save(@"test1.xml");test1.xml生成的内容<NewDataSet>
<SB>
<学号>1</学号>
<姓名>陈一</姓名>
<性别>男</性别>
<总成绩>100</总成绩>
</SB>
<SB>
<学号>2</学号>
<姓名>王二</姓名>
<性别>女</性别>
<总成绩>90</总成绩>
</SB>
<SB>
<学号>3</学号>
<姓名>李三</姓名>
<性别>女</性别>
<总成绩>80</总成绩>
</SB>
<SB>
<学号>4</学号>
<姓名>赵四</姓名>
<性别>男</性别>
<总成绩>70</总成绩>
</SB>
<SX>
<学号>1</学号>
<姓名>陈一</姓名>
<科目>数学</科目>
<分成绩>50</分成绩>
</SX>
<SX>
<学号>2</学号>
<姓名>王二</姓名>
<科目>数学</科目>
<分成绩>90</分成绩>
</SX>
<SX>
<学号>3</学号>
<姓名>李三</姓名>
<科目>历史</科目>
<分成绩>50</分成绩>
</SX>
<SX>
<学号>3</学号>
<姓名>李三</姓名>
<科目>地理</科目>
<分成绩>30</分成绩>
</SX>
<SX>
<学号>4</学号>
<姓名>赵四</姓名>
<科目>英文</科目>
<分成绩>70</分成绩>
</SX>
</NewDataSet>
<?xml version="1.0" encoding="utf-8"?>
<NewDataSet>
<SB>
<学号>1</学号>
<姓名>陈一</姓名>
<性别>男</性别>
<总成绩>100</总成绩>
<成绩>
<数学>50</数学>
</成绩>
</SB>
<SB>
<学号>2</学号>
<姓名>王二</姓名>
<性别>女</性别>
<总成绩>90</总成绩>
<成绩>
<数学>90</数学>
</成绩>
</SB>
<SB>
<学号>3</学号>
<姓名>李三</姓名>
<性别>女</性别>
<总成绩>80</总成绩>
<成绩>
<历史>50</历史>
<地理>30</地理>
</成绩>
</SB>
<SB>
<学号>4</学号>
<姓名>赵四</姓名>
<性别>男</性别>
<总成绩>70</总成绩>
<成绩>
<英文>70</英文>
</成绩>
</SB>
</NewDataSet>
<?xml version="1.0" encoding="utf-8"?>
<NewDataSet>
<SB>
<学号>1</学号>
<姓名>陈一</姓名>
<性别>男</性别>
<总成绩>100</总成绩>
<成绩>
<数学>50</数学>
</成绩>
</SB>
<SB>
<学号>2</学号>
<姓名>王二</姓名>
<性别>女</性别>
<总成绩>90</总成绩>
<成绩>
<数学>90</数学>
</成绩>
</SB>
<SB>
<学号>3</学号>
<姓名>李三</姓名>
<性别>女</性别>
<总成绩>80</总成绩>
<成绩>
<历史>50</历史>
<地理>30</地理>
</成绩>
</SB>
<SB>
<学号>4</学号>
<姓名>赵四</姓名>
<性别>男</性别>
<总成绩>70</总成绩>
<成绩>
<英文>70</英文>
</成绩>
</SB>
</NewDataSet>
XmlDeclaration xmlDecl = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "yes");
xmlDoc.InsertBefore(xmlDecl, xmlDoc.DocumentElement); xmlDoc.Save(@"test1.xml");试下
{
//建立数据集对象,像数据库一样
DataSet ds = new DataSet();
//建立表
DataTable dtx = new DataTable("Sx");
DataTable dty = new DataTable("Sy");
//dtx主表,创建列
dtx.Columns.Add(new DataColumn("学号", typeof(int)));
dtx.Columns.Add(new DataColumn("姓名", typeof(string)));
dtx.Columns.Add(new DataColumn("成绩", typeof(DataTable)));
//dty从表,创建列
dty.Columns.Add(new DataColumn("学号", typeof(int)));
dty.Columns.Add(new DataColumn("科目", typeof(string)));
dty.Columns.Add(new DataColumn("成绩", typeof(string)));
//从表数据,创建行
DataRow dry = dty.NewRow();
dry["学号"] = 1;//陈一的id
dry["科目"] = "语文";
dry["成绩"] = "90";
dty.Rows.Add(dry);
dry = dty.NewRow();
dry["学号"] = 1;//陈一的id
dry["科目"] = "数学";
dry["成绩"] = "80";
dty.Rows.Add(dry);
//主表数据,创建行
DataRow drx = dtx.NewRow();
drx["学号"] = 1;//陈一
drx["姓名"] = "陈一";
drx["成绩"] = dty;//将陈一的成绩全部存入
dtx.Rows.Add(drx);
//主表数据,创建行
drx = dtx.NewRow();
drx["学号"] = 2;
drx["姓名"] = "王二";
drx["成绩"] = null;
dtx.Rows.Add(drx); ds.Tables.Add(dtx);
WriteXml(ds);
}
public void WriteXml(DataSet ds)
{
XmlTextWriter writer = new XmlTextWriter(Response.OutputStream, System.Text.Encoding.GetEncoding("utf-8"));
writer.Formatting = Formatting.Indented;
writer.Indentation = 1;
writer.IndentChar = ' ';
writer.WriteStartDocument();
ds.WriteXml(writer);
writer.Flush();
writer.Close();
Response.ContentType = "text/xml";
Response.End();
}
看看这个结果就知道我要的是什么啦。
{
//建立数据集对象,像数据库一样
DataSet ds = new DataSet();
//建立表
DataTable dtx = new DataTable("Sx");
DataTable dty = new DataTable("Sy");
//dtx主表,创建列
dtx.Columns.Add(new DataColumn("学号", typeof(int)));
dtx.Columns.Add(new DataColumn("姓名", typeof(string)));
dtx.Columns.Add(new DataColumn("成绩", typeof(DataTable)));
//dty从表,创建列
dty.Columns.Add(new DataColumn("学号", typeof(int)));
dty.Columns.Add(new DataColumn("科目", typeof(string)));
dty.Columns.Add(new DataColumn("成绩", typeof(string)));
//从表数据,创建行
DataRow dry = dty.NewRow();
dry["学号"] = 1;//陈一的id
dry["科目"] = "语文";
dry["成绩"] = "90";
dty.Rows.Add(dry);
dry = dty.NewRow();
dry["学号"] = 1;//陈一的id
dry["科目"] = "数学";
dry["成绩"] = "80";
dty.Rows.Add(dry);
//主表数据,创建行
DataRow drx = dtx.NewRow();
drx["学号"] = 1;//陈一
drx["姓名"] = "陈一";
drx["成绩"] = dty;//将陈一的成绩全部存入,注意是DataTable类型。
dtx.Rows.Add(drx);
//主表数据,创建行
drx = dtx.NewRow();
drx["学号"] = 2;
drx["姓名"] = "王二";
drx["成绩"] = null;
dtx.Rows.Add(drx); ds.Tables.Add(dtx);
WriteXml(ds);
}
public void WriteXml(DataSet ds)
{
XmlTextWriter writer = new XmlTextWriter(Response.OutputStream, System.Text.Encoding.GetEncoding("utf-8"));
writer.Formatting = Formatting.Indented;
writer.Indentation = 1;
writer.IndentChar = ' ';
writer.WriteStartDocument();
ds.WriteXml(writer);
writer.Flush();
writer.Close();
Response.ContentType = "text/xml";
Response.End();
}
看看这个结果就知道我要的是什么啦。
<pkID>1</pkID>
<CateName>首页</CateName>
<CatePath>,0,</CatePath>
</CateList>
<CateList>
<pkID>2</pkID>
<CateName>新闻</CateName>
<CatePath>,0,</CatePath>
<CateList>
<pkID>5</pkID>
<CateName>国际</CateName>
<CatePath>,0,2,</CatePath>
</CateList>
<CateList>
<pkID>6</pkID>
<CateName>国内</CateName>
<CatePath>,0,2,</CatePath>
</CateList>
<CateList>
<pkID>7</pkID>
<CateName>本地</CateName>
<CatePath>,0,2,</CatePath>
</CateList>
<CateList>
<pkID>8</pkID>
<CateName>行业</CateName>
<CatePath>,0,2,</CatePath>
</CateList>
</CateList>
<CateList>
<pkID>3</pkID>
<CateName>产品</CateName>
<CatePath>,0,</CatePath>
</CateList>
<CateList>
<pkID>4</pkID>
<CateName>案例</CateName>
<CatePath>,0,</CatePath>
</CateList>
我用ReadXML读取到DataSet,然后再用for显示该DataSet,发现生成了两个额外的列:
Start_Id和Start_Id_0。有要是用来描述主从关系的。接下来,我在构造DataSet时,也加入了这两列,但是还是不行的。
<pkID>1</pkID>
<CateName>首页</CateName>
<CatePath>,0,</CatePath>
</CateList>
<CateList>
<pkID>2</pkID>
<CateName>新闻</CateName>
<CatePath>,0,</CatePath>
<CateList>
<pkID>5</pkID>
<CateName>国际</CateName>
<CatePath>,0,2,</CatePath>
</CateList>
<CateList>
<pkID>6</pkID>
<CateName>国内</CateName>
<CatePath>,0,2,</CatePath>
</CateList>
<CateList>
<pkID>7</pkID>
<CateName>本地</CateName>
<CatePath>,0,2,</CatePath>
</CateList>
<CateList>
<pkID>8</pkID>
<CateName>行业</CateName>
<CatePath>,0,2,</CatePath>
</CateList>
</CateList>
<CateList>
<pkID>3</pkID>
<CateName>产品</CateName>
<CatePath>,0,</CatePath>
</CateList>
<CateList>
<pkID>4</pkID>
<CateName>案例</CateName>
<CatePath>,0,</CatePath>
</CateList>
我用ReadXML读取到DataSet,然后再用for显示该DataSet,发现生成了两个额外的列:
Start_Id和Start_Id_0。有要是用来描述主从关系的。接下来,我在构造DataSet时,也加入了这两列,但是还是不行的。