- private string ListToXml()
- {
- XmlDocument xdoc = new XmlDocument();
- xdoc.LoadXml("<menu></menu>");
- XPathNavigator xnav = xdoc.CreateNavigator();
- ...............
- DataTable dt = rs.dataSet.Tables[0];
- int rowsnum = dt.Rows.Count;
- for (int xh = 0; xh < rowsnum; xh++)
- {
- DataRow row = dt.Rows[xh];
- string tidstr = "T" + row["tid"].ToString();
- string bidstr = "B" + row["bid"].ToString();
- string sidstr = "S" + row["sid"].ToString();
- string bname = row["bname"].ToString();
- string sname = row["sname"].ToString();
- xnav.MoveToRoot();
- xnav.MoveToChild("menu", "");
- if (xnav.SelectSingleNode(String.Format("/menu/{0}", tidstr)) != null)
- {
- xnav.MoveToChild(tidstr, "");
- if (xnav.SelectSingleNode(String.Format("/menu/{0}/{1}", tidstr, bidstr)) != null)
- {
- xnav.MoveToChild(bidstr, "");
- if (xnav.SelectSingleNode(String.Format("/menu/{0}/{1}/{2}", tidstr, bidstr, sidstr)) == null)
- {
- xnav.AppendChild(String.Format("<{0}>{1}</{0}>", sidstr, sname));
- }
- }
- else
- {
- xnav.AppendChild(String.Format("<{0} bname=/"{1}/"></{0}>", bidstr, bname));
- }
- }
- else
- {
- xnav.AppendChild(String.Format("<{0}></{0}>", tidstr));
- }
- }
- return (xdoc.InnerXml);
- }
我的数据结构是这样的 :
tid bid bname sid sname
0 100 b1 1000 s1
0 100 b1 1001 s2
0 100 b1 1002 s3
0 100 b1 1003 s4
0 100 b1 1004 s5
0 101 b2 1005 s6
0 101 b2 1006 s7
1 102 b3 1007 s8
1 102 b3 1008 s9
1 103 b4 1009 s10
..................
最后要变成
<menu>
<T0>
<B100 bname= "b1 ">
<S1000> s1 </S1000>
<S1001> s2 </S1001>
<S1002> s3 </S1002>
<S1003> s4 </S1003>
<S1004> s5 </S1004>
</B100>
<B101 bname= "b2 ">
<S1005> s6 </S1005>
<S1006> s7 </S1006>
</B101>
</T0>
<T1>
<B102 bname= "b3 ">
<S1007> s8 </S1007>
<S1008> s9 </S1008>
</B102>
<B103 bname= "b4 ">
<S1009> s10 </S1000>
.......
</B103>
....
</T1>
......
</menu>
想用XmlDocument 结合 XPathVavigator 来进行转换。
做出结果如下: