根据DataTable递归生成XML文件的例子

假如数据库中表 Table1 的字段分别如下:
id Name ParentId
1 爷爷 0
2 爸爸 1
3 叔叔 1
4 我 2
5 妹妹 2
6 堂弟 3

生成如下的 Xml 格式的文件,

XML/XHTML 代码
<family>
  
<fa id="1" name="爷爷" parent="0">
    
<fa id="2" name="爸爸" parent="1">
      
<fa id="4" name="我" parent="2" />
      
<fa id="5" name="妹妹" parent="2" />
    
</fa>
    
<fa id="3" name="叔叔" parent="1">
      
<fa id="6" name="堂弟" parent="3" />
    
</fa>
  
</fa>
</family>

则可以采用下面的方法实现:

C# 代码
DataTable t = new DataTable();
protected void Page_Load(object sender, EventArgs e)
{
  
string xml = "";
  SqlConnection cn
= new SqlConnection("Data Source=(local);User ID=sa;Password=;Initial Catalog=pubs");
  SqlDataAdapter sa
= new SqlDataAdapter("select * from Table1", cn);
  DataSet ds
= new DataSet();
  sa.Fill(ds);

  t
= ds.Tables[0];
  xml
= "<family>" + WriteXml("0"+ "</family>";
  System.Xml.XmlDocument doc
= new System.Xml.XmlDocument();
  doc.LoadXml(xml);
  doc.Save(Server.MapPath(
"~/xxx.xml"));
}
String WriteXml(String ParentId)
{
  
string s = "";
  
//防止关键字,加[]
  DataRow[] dv = t.Select("[ParentId]=" + ParentId);
  
for (int i = 0; i < dv.Length; i++)
  {
    
if (dv[i].Table.Select("[ParentId] = " + dv[i]["id"]).Length > 0)
    {
      s
+= "<fa id='" + dv[i]["id"].ToString() + "' name='" + dv[i]["name"].ToString() + "' parent='" + dv[i]["ParentId"].ToString() + "'>";
      s
+= WriteXml(dv[i]["id"].ToString()) + "</fa>";
    }
    
else
    {
      s
+= "<fa id='" + dv[i]["id"].ToString() + "' name='" + dv[i]["name"].ToString() + "' parent='" + dv[i]["ParentId"].ToString() + "'/>";
    }
  }
  
return s;
}
posted @ 2014-06-15 14:57  zzg168  阅读(266)  评论(0)    收藏  举报