在.net 中 将线性结构数据列表转换为 XML 格式的层次结构

  1. private string ListToXml()
  2.     {
  3.         XmlDocument xdoc = new XmlDocument();
  4.         xdoc.LoadXml("<menu></menu>");
  5.         XPathNavigator xnav = xdoc.CreateNavigator();
  6.         ...............
  7.         DataTable dt = rs.dataSet.Tables[0];
  8.         int rowsnum = dt.Rows.Count;
  9.         for (int xh = 0; xh < rowsnum; xh++)
  10.         {
  11.             DataRow row = dt.Rows[xh];
  12.             string tidstr = "T" + row["tid"].ToString();
  13.             string bidstr = "B" + row["bid"].ToString();
  14.             string sidstr = "S" + row["sid"].ToString();
  15.             string bname = row["bname"].ToString();
  16.             string sname = row["sname"].ToString();
  17.             xnav.MoveToRoot();
  18.             xnav.MoveToChild("menu""");
  19.             if (xnav.SelectSingleNode(String.Format("/menu/{0}", tidstr)) != null)
  20.             {
  21.                 xnav.MoveToChild(tidstr, "");
  22.                 if (xnav.SelectSingleNode(String.Format("/menu/{0}/{1}", tidstr, bidstr)) != null)
  23.                 {
  24.                     xnav.MoveToChild(bidstr, "");
  25.                     if (xnav.SelectSingleNode(String.Format("/menu/{0}/{1}/{2}", tidstr, bidstr, sidstr)) == null)
  26.                     {
  27.                         xnav.AppendChild(String.Format("<{0}>{1}</{0}>", sidstr, sname));
  28.                     }
  29.                 }
  30.                 else
  31.                 {
  32.                     xnav.AppendChild(String.Format("<{0} bname=/"{1}/"></{0}>", bidstr, bname));
  33.                 }
  34.             }
  35.             else
  36.             {
  37.                 xnav.AppendChild(String.Format("<{0}></{0}>", tidstr));
  38.             }
  39.         }
  40.             return (xdoc.InnerXml);
  41.         
  42.     }

我的数据结构是这样的   :  
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   来进行转换。  

做出结果如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值