我的数据结构是这样的   :   
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   来进行转换。
原来的程序是这样的,但是有问题出现,详见  http://topic.csdn.net/u/20080922/10/3cf9ed36-3a8b-493a-8313-35291531db45.html?seed=985537187 
请各位帮忙指点改正

解决方案 »

  1.   

    SqlProcedure sp = new SqlProcedure("get_types_brands_series");
                SqlResult rs = sp.CallNoParam(); 
                DataTable dt = rs.dataSet.Tables[0];
                int rowsnum = dt.Rows.Count;            XmlDocument doc = new XmlDocument();
                doc.LoadXml("menu");
                foreach (DataRow row in dt.Rows)
                {
                    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();                XmlElement element = null;
                    bool exist = false;
                    XmlNodeList nodeList = doc.GetElementsByTagName(tidstr);
                    if (nodeList != null && nodeList.Count > 0)
                    {
                        element = (XmlElement)nodeList[0];
                        exist = true;
                    }
                    else
                    {
                        element = doc.CreateElement(tidstr);
                    }
                    XmlElement bIdElement = null;
                    bool bExist = false;
                    if (exist)
                    {
                        XmlNodeList bList = element.GetElementsByTagName(bidstr);
                        if (bList != null && bList.Count > 0)
                        {
                            bIdElement = (XmlElement)bList[0];
                            bExist = true;
                        }
                        else
                        {
                            bIdElement = doc.CreateElement(bidstr);
                            bIdElement.SetAttribute("bname", bname);
                        }                }
                    else
                    {
                        bIdElement = doc.CreateElement(bidstr);
                        bIdElement.SetAttribute("bname", bname);
                    }
                    XmlElement sIdElement = doc.CreateElement(sidstr);
                    sIdElement.InnerText = sname;
                    element.AppendChild(sIdElement);                if (!bExist)
                    {
                        element.AppendChild(bIdElement);
                    }
                    if (!exist)
                    {
                        doc.DocumentElement.AppendChild(element);
                    }
                }            doc.Save("filepath");
      

  2.   

    个人想法
    定义一个对应表的类,读出数据库中的内容到该类数组中
    定义一个xmldocument,初始化为"<menu></menu>"
    foreach 每个数据项
      判断是否有//menu/ + T + tid节点
         没有添加
      判断是否有//menu/ + T + tid/ + B + bid节点
         没有添加
      判断是否有//menu/ + T + tid/ + B + bid/ + S + sid节点
         没有添加
      
      

  3.   

    To chengyijiu :
       设想就是这样,我主要是实现的过程中出现了异常,不知道问题在哪。To wang4237:
       感谢你费心提供了代码,不过我还是想采用 想用XmlDocument  结合  XPathVavigator  来进行转换。 
    这样可能程序结构要简单明晰些。
      

  4.   

    可能是解析器的问题你可以提交BUG给它。
      

  5.   

    已经解决,见  http://blog.csdn.net/ubc/archive/2008/09/24/2972376.aspx
    谢谢大家帮助!