把这个xml解析之后,生成另一个xml。
求助,谢谢了?
我只是节选一小部分,当然数据量不止这一点。
就是要把每个的拥有父菜单id的table,插入到相对应的菜单项中。结果如第二个文件。
源xml
<NewDataSet>
 <Table>
  <MENUID>0</MENUID> 
  <MENULEVEL>1</MENULEVEL> 
  <MENUNAME>首页</MENUNAME> 
 </Table>
  <Table>
  <MENUID>1</MENUID> 
  <MENULEVEL>1</MENULEVEL> 
  <MENUNAME>管理</MENUNAME> 
  </Table>
  <Table>
  <MENUID>10</MENUID> 
  <MENULEVEL>1</MENULEVEL> 
  <MENUNAME>业务申办</MENUNAME> 
  </Table>
  <Table>
  <MENUID>11</MENUID> 
  <MENULEVEL>2</MENULEVEL> 
  <PARENTMENUID>1</PARENTMENUID> 
  <MENUNAME>业务办理</MENUNAME> 
  </Table>
  <Table>
  <MENUID>12</MENUID> 
  <MENULEVEL>3</MENULEVEL> 
  <PARENTMENUID>11</PARENTMENUID> 
  <MENUNAME>业务规则</MENUNAME> 
  </Table>
  <Table>
  <MENUID>13</MENUID> 
  <MENULEVEL>2</MENULEVEL> 
  <PARENTMENUID>1</PARENTMENUID> 
  <MENUNAME>统计分析</MENUNAME> 
  </Table><NewDataSet>第二个xml,需要生成的
<NewDataSet>
  <table MENUID="0" MENUNAME="首页">
  <table MENUID="12" MENUNAME="业务规则">   </table>
<table MENUID="11" MENUNAME="业务办理">
<table MENUID="12" MENUNAME="业务规则">  </table>
 </table>
  </table>
  <table MENUID="1" MENUNAME="管理"></table>
  <table MENUID="10" MENUNAME="业务申办"></table><NewDataSet>

解决方案 »

  1.   

    XmlDocument doc= new XmlDocument();
    doc.Load(Server.MapPath("a.xml"));
    XmlNodeList list = xml.SelectSingleNode("NewDataSet").ChildNodes;
    foreach(XmlNode xn in list )
    {
    XmlElement xe=(XmlElement)xn;
    }
      

  2.   

    //加载源xml文件
    public void LoadXml(string path)
            {
                DataSet ds = new DataSet();
                ds.ReadXml(path);            XmlDocument xmlDoc = new XmlDocument();
                XmlElement root = xmlDoc.CreateElement("NewDataSet");
                DataTable dt = ds.Tables["Table"];
                addNode(xmlDoc, root, dt, "");
                xmlDoc.AppendChild(root);
                xmlDoc.Save("new.xml");//保存新xml
            }
    //递归生成新xml节点
            private void addNode(XmlDocument xmlDoc,XmlElement node,DataTable dt,string parent)
            {
                DataRow[] dr = dt.Select(parent == "" ? "MENULEVEL='1'" : "PARENTMENUID='" + parent + "'");
                for (int i = 0; i < dr.Length; i++)
                {
                    XmlElement ele = xmlDoc.CreateElement("table");
                    ele.SetAttribute("MENUID", dr[i]["MENUID"].ToString());
                    ele.SetAttribute("MENUNAME", dr[i]["MENUNAME"].ToString());
                    node.AppendChild(ele);
                    addNode(xmlDoc, ele, dt, dr[i]["MENUID"].ToString());
                }
            }用一个递归就可以,简单写了一下。做为参考吧