程序段中对语句作了说明。主要使用xmlwriter类进行xml文件生成。
下面这是由关系数据库生成相应xml文件过程。由于xml只是中间件,所以忽略了schema或者dtd。
1 private void page_load(object sender, system.eventargs e)
2 {
3 // 在此处放置用户代码以初始化页面
4 //基本信息定义
5 string strtablename="systypes";
6 string strconnection="server=suntears;user id=sa;password=041210;database=webapplication1_db";
7 string strsql="select * from "+strtablename;
8 sqlconnection objconn=new sqlconnection(strconnection);
9 sqldataadapter objadapter=new sqldataadapter(strsql,objconn);
10 dataset objdset=new dataset();
11 objadapter.fill(objdset,"temp");
12 xmltextwriter objxmlwriter;
13 string strtemp1=request.physicalapplicationpath;
14 string strpath=strtemp1+"qiming.xml";
15 //初始化xmlwriter.用此类写xml文件
16 objxmlwriter=new xmltextwriter(strpath,null);
17 //创建开头的xml声明
18 objxmlwriter.writestartdocument();
19 //创建根元素xml1
20 objxmlwriter.writestartelement("xml1");
21 //表名为元素名,字段名为属性,表中的记录为属性的值
22 for(int i=0;i<objdset.tables["temp"].rows.count;i++)
23 {
24 objxmlwriter.writestartelement("menu");
25 for(int j=0;j<objdset.tables["temp"].columns.count;j++)
26 {
27 //写入属性
28 objxmlwriter.writeattributestring(objdset.tables["temp"].columns[j].columnname,objdset.tables["temp"].rows[i][j].tostring());
29 }
30 objxmlwriter.writeendelement();
31 }
32 objxmlwriter.writeendelement();
33 objxmlwriter.writeenddocument();
34 //用close方法关闭文件,否则文件将被锁定
35 objxmlwriter.close();
36 // 在页面上显示结果
37 string strxmlresult;
38 streamreader objsr = file.opentext(strpath);
39 strxmlresult = objsr.readtoend();
40 objsr.close();
41 response.write("<pre>" + server.htmlencode(strxmlresult) + "<pre>");
42 }
下面是通过上面程序生成的xml文件生成关系数据库的代码
1 private void page_load(object sender, system.eventargs e)
2 {
3 // 在此处放置用户代码以初始化页面
4 //基本信息定义
5 int cx=1;
6 string strconn="server=suntears;user id=sa;password=;database=xml_example";
7 string strappstr=request.physicalapplicationpath;
8 string strpath=strappstr+"qiming.xml";
9 string strtablename="xml1";
10 string strcreatetable="create table "+strtablename+"(";
11 xmltextreader objxmlreader=new xmltextreader(strpath);
12 sqlconnection objconn=new sqlconnection(strconn);
13 sqlcommand objcommand;
14 sqldataadapter objadapter;
15 dataset objdset=new dataset();
16 datarow objrow;
17 xmlnodetype objnodetype;
18 //采用xmlreader类进行xml文件访问操作
19 //xmlreader采用拉(pull)模式。因此通过read()方法迭代各个节点
20 while(objxmlreader.read())
21 {
22 objnodetype=objxmlreader.nodetype;
23 //根据节点类型进行不同操作
24 switch(objnodetype)
25 {
26 //xml文件开头的声明
27 case xmlnodetype.xmldeclaration:
28 response.write("11111"+objxmlreader.name+"<br>");
29 break;
30 //正常节点类型
31 case xmlnodetype.element:
32 //根据属性个数判断是否是根元素
33 if(objxmlreader.attributecount>0)
34 {
35 //cx作为标志位。第一次访问非根元素节点时根据元素结构生成数据库
36 if(cx==1)
37 {
38 while(objxmlreader.movetonextattribute())
39 {
40 strcreatetable=strcreatetable+objxmlreader.name+" varchar(50), ";
41 }
42 strcreatetable=strcreatetable+")";
43 objcommand=new sqlcommand(strcreatetable,objconn);
44 objconn.open();
45 objcommand.executenonquery();
46 objconn.close();
47 objadapter=new sqldataadapter("select * from "+strtablename,objconn);
48 objadapter.fill(objdset,strtablename);
49 objxmlreader.movetofirstattribute();
50 //更改标志为cx数值
51 cx=0;
52 }
53 //将xml文件中数据转存到dataset对象中
54 objrow=objdset.tables[strtablename].newrow();
55 objxmlreader.movetofirstattribute();
56 for(int j=0;j<objxmlreader.attributecount;j++)
57 {
58 objrow[j]=objxmlreader.value.tostring();
59 objxmlreader.movetonextattribute();
60 }
61 objdset.tables[strtablename].rows.add(objrow);
62 }
63 break;
64 }
65 }
66 //显示转存后的数据表
67 datagrid1.datasource=objdset.tables[strtablename];
68 datagrid1.databind();
69 }将数据更新到数据库的代码没有编写,自己弄吧^_^
http://suntears.cnblogs.com/archive/2006/06/02/416207.html
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!


