方法一:
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["stu"].Columns["sid"],
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", con);
adpt.Fill(ds, "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", "UTF-8", null));
XmlElement xmlelem = xmldoc.CreateElement("", "Request", "");
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();
}
读取多个table,存放到dataset,创建关系,导出树形XML格式
原文地址:http://haihuiwei.blog.51cto.com/4789207/1656988