读取多个table,存放到dataset,创建关系,导出树形XML格式


方法一:

private void ExitXML()

{


DataSet ds = new DataSet("request");


DataTable stu = new DataTable();

stu =NewsDAL.dbServer.getTableValue("stu").Tables[0];

stu.TableName = "stu";

ds.Tables.Add(stu.Copy());



DataTable Stu_Course = new DataTable();

Stu_Course = NewsDAL.dbServer.getTableValue("Stu_Course").Tables[0];

Stu_Course.TableName = "Stu_Course";

ds.Tables.Add(Stu_Course.Copy());



DataTable Message = new DataTable();

Message = NewsDAL.dbServer.getTableValue("Message").Tables[0];

Message.TableName = "Message";

ds.Tables.Add(Message.Copy());



DataTable Course = new DataTable();

Course = NewsDAL.dbServer.getTableValue("Course").Tables[0];

Course.TableName = "Course";

ds.Tables.Add(Course.Copy());




// 建立父子关系

ds.Relations.Add("stu_Stu_Course",ds.Tables["stu"].Columns["sid"],

ds.Tables["Stu_Course"].Columns["sid"]).Nested = true;


ds.Relations.Add("stu_Message",

ds.Tables["Message"].Columns["sid"]);


XmlDocument xmldoc = new XmlDocument();

// 创建文档声明和根节点

xmldoc.AppendChild(xmldoc.CreateXmlDeclaration("1.0","UTF-8",null));

XmlElement xmlelem = xmldoc.CreateElement("","Request","");

xmldoc.AppendChild(xmlelem);



XmlElement xmlelem_Stus = xmldoc.CreateElement(ds.Tables[0].TableName+"s");

xmlelem.AppendChild(xmlelem_Stus);


foreach(DataRow dr in ds.Tables[0].Rows ){

XmlElement xmlelem_Stu = xmldoc.CreateElement(ds.Tables[0].TableName);

xmlelem_Stus.AppendChild(xmlelem_Stu);


foreach(DataColumn dc in ds.Tables[0].Columns ){

XmlElement xmlelem_dr = xmldoc.CreateElement(dc.ColumnName);


xmlelem_Stu.AppendChild(xmlelem_dr);

xmlelem_dr.InnerText = dr[dc.ColumnName].ToString();

}


XmlElement xmlelem_Stu_Courses = xmldoc.CreateElement(ds.Tables[1].TableName + "s");

xmlelem_Stu.AppendChild(xmlelem_Stu_Courses);

foreach (DataRow dr2 in dr.GetChildRows("stu_Stu_Course"))

{

XmlElement xmlelem_Stu_Course = xmldoc.CreateElement(ds.Tables[1].TableName);

xmlelem_Stu_Courses.AppendChild(xmlelem_Stu_Course);

foreach (DataColumn dc2 in ds.Tables[1].Columns)

{

XmlElement xmlelem_dr2 = xmldoc.CreateElement(dc2.ColumnName);


xmlelem_Stu_Course.AppendChild(xmlelem_dr2);

xmlelem_dr2.InnerText = dr2[dc2.ColumnName].ToString();

}

}


XmlElement xmlelem_stu_Messages = xmldoc.CreateElement(ds.Tables[2].TableName + "s");

xmlelem_Stu.AppendChild(xmlelem_stu_Messages);

foreach (DataRow dr3 in dr.GetChildRows("stu_Message"))

{

XmlElement xmlelem_stu_Message = xmldoc.CreateElement(ds.Tables[2].TableName);

xmlelem_stu_Messages.AppendChild(xmlelem_stu_Message);

foreach (DataColumn dc3 in ds.Tables[2].Columns)

{

XmlElement xmlelem_dr3 = xmldoc.CreateElement(dc3.ColumnName);


xmlelem_stu_Message.AppendChild(xmlelem_dr3);

xmlelem_dr3.InnerText = dr3[dc3.ColumnName].ToString();

}

}

}


try

{

xmldoc.Save("e:\\c1.xml");

}

catch (Exception e)

{


Console.WriteLine(e.Message);

}


Console.Read();

}



方法二:

private static void CreateXmlForDataSetRelation()

{

SqlConnection con = new SqlConnection(@"server=.;user=sa;pwd=alog;database=CestDB");

SqlDataAdapter adpt = new SqlDataAdapter("SELECT * FROM Users",con);

DataSet ds = new DataSet("request");

try

{

con.Open();

adpt.Fill(ds,"Users");

adpt.SelectCommand = new SqlCommand("SELECT * FROM Logs",con);

adpt.Fill(ds,"Logs");

adpt.SelectCommand = new SqlCommand("SELECT * FROM Tanks","Tanks");


}

catch (SqlException e)

{

Console.Write(e.ToString());

}

finally

{

con.Dispose();

}


// 建立父子关系

ds.Relations.Add("User_Log",ds.Tables["Users"].Columns["UserID"],

ds.Tables["Logs"].Columns["UserID"]).Nested = true;


ds.Relations.Add("Log_Tank",ds.Tables["Logs"].Columns["LogID"],

ds.Tables["Tanks"].Columns["LogID"]);


XmlDocument xmldoc = new XmlDocument();

// 创建文档声明和根节点

xmldoc.AppendChild(xmldoc.CreateXmlDeclaration("1.0","");

xmldoc.AppendChild(xmlelem);


// Users

XmlElement xmlelem_Users = xmldoc.CreateElement("Users");

xmlelem.AppendChild(xmlelem_Users);


foreach (DataRow patentrow in ds.Tables["Users"].Rows)

{

// User

XmlElement xmlelem_User = xmldoc.CreateElement("User");

xmlelem_Users.AppendChild(xmlelem_User);


// UserID

XmlElement xmlelem_UserID = xmldoc.CreateElement("UserID");

XmlText xmltxt_UserID = xmldoc.CreateTextNode(patentrow["UserID"].ToString());

xmlelem_UserID.AppendChild(xmltxt_UserID);

xmlelem_User.AppendChild(xmlelem_UserID);


// UserName

XmlElement xmlelem_UserName = xmldoc.CreateElement("UserName");

XmlText xmltxt_UserName = xmldoc.CreateTextNode(patentrow["UserName"].ToString());

xmlelem_UserName.AppendChild(xmltxt_UserName);

xmlelem_User.AppendChild(xmlelem_UserName);


// Logs

XmlElement xmlelem_Logs = xmldoc.CreateElement("Logs");

xmlelem_User.AppendChild(xmlelem_Logs);


foreach (DataRow childrow in patentrow.GetChildRows("User_Log"))

{

// Log

XmlElement xmlelem_Log = xmldoc.CreateElement("Log");

xmlelem_Logs.AppendChild(xmlelem_Log);


// LogID

XmlElement xmlelem_LogID = xmldoc.CreateElement("LogID");

XmlText xmltxt_LogID = xmldoc.CreateTextNode(childrow["LogID"].ToString());

xmlelem_LogID.AppendChild(xmltxt_LogID);

xmlelem_Log.AppendChild(xmlelem_LogID);


// LogDate

XmlElement xmlelem_LogDate = xmldoc.CreateElement("LogDate");

XmlText xmltxt_LogDate = xmldoc.CreateTextNode(childrow["LogDate"].ToString());

xmlelem_LogDate.AppendChild(xmltxt_LogDate);

xmlelem_Log.AppendChild(xmlelem_LogDate);


// Tanks

XmlElement xmlelem_Tanks = xmldoc.CreateElement("Tanks");

xmlelem_Log.AppendChild(xmlelem_Tanks);


foreach (DataRow childrow2 in childrow.GetChildRows("Log_Tank"))

{

// Tank

XmlElement xmlelem_Tank = xmldoc.CreateElement("Tank");

xmlelem_Tanks.AppendChild(xmlelem_Tank);


// TankName

XmlElement xmlelem_TankName = xmldoc.CreateElement("TankName");

XmlText xmltxt_TankName = xmldoc.CreateTextNode(childrow2["TankName"].ToString());

xmlelem_TankName.AppendChild(xmltxt_TankName);

xmlelem_Tank.AppendChild(xmlelem_TankName);


// TankScore

XmlElement xmlelem_TankScore = xmldoc.CreateElement("TankScore");

XmlText xmltxt_TankScore = xmldoc.CreateTextNode(childrow2["TankScore"].ToString());

xmlelem_TankScore.AppendChild(xmltxt_TankScore);

xmlelem_Tank.AppendChild(xmlelem_TankScore);

}


//Console.WriteLine("\t" + childrow["loginID"] + childrow["Title"] + childrow["Reason"]);

}

}


try

{

xmldoc.Save("ccc.xml");

}

catch (Exception e)

{


Console.WriteLine(e.Message);

}


Console.Read();

}

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念