程序段中对语句作了说明。主要使用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 23 { 24 objXMLWriter.WriteStartElement("menu"); 25 for(int j=0;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(" 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+" 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 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 }将数据更新到数据库的代码没有编写,自己弄吧^_^" + Server.HTMLEncode(strXMLResult) + "
");
");

