我有一个数据表:Menus
表结构如下:
ID,ParentID,Name,Src
1   0         File  xxx.xxx.xx
2   0         edit  xxx.xxx.xx
3   1         open  xxx.xxx.xx
4   2         copy  xxx.xxx.xx如何用ASPX生成如下格式的XML文件(Menus.xml)
<XML id='Menus'>
<Menu>
<TitleMenu Id='1' Name='file'>
<MenuBotton Id='3' Name='open' Src='xxx.xxx.xx'></MenuBotton>
</TitleMenu>
<TitleMenu Id='2' Name='edit'>
<MenuBotton Id='4' Name='copy' Src='xxx.xxx.xx'></MenuBotton>
</TitleMenu>
</Menu>
</XML>答案如果正是我所需,个人得分>200分,分我有的是

解决方案 »

  1.   

    可以用xml中的DOM       
    具体请学习System.Xml下的XmlDocument
      

  2.   

    http://www.ssm1226.com/tech/Detail.asp?class=39&pkid=55
    这是个读取XML的例子,我就懒点,你自己做吧,反正差不远!
      

  3.   

    代码
    private void Form1_Load(object sender, System.EventArgs e)
    {
    XmlDocument xml = new XmlDocument();
    XmlDeclaration declareation = xml.CreateXmlDeclaration("1.0", "GB2312", null);
    xml.AppendChild(declareation);
    XmlElement XML, Menu, TitleMenu, MenuBotton;
    XmlAttribute XMLID, TitleMenuId, TitltMenuName, MenuBottonId, MenuBottonName, MenuBottonSrc;

    XML = xml.CreateElement("XML");
    XMLID = xml.CreateAttribute("id");
    XMLID.Value = "Menus";
    xml.AppendChild(XML);
    XML.Attributes.Append(XMLID);

    Menu = xml.CreateElement("Menu");
    XML.AppendChild(Menu); TitleMenu = xml.CreateElement("TitleMenu");
    TitleMenuId = xml.CreateAttribute("id");
    TitltMenuName = xml.CreateAttribute("Name");
    TitleMenuId.Value = "1";
    TitltMenuName.Value = "file";
    TitleMenu.Attributes.Append(TitleMenuId);
    TitleMenu.Attributes.Append(TitltMenuName);
    Menu.AppendChild(TitleMenu); MenuBotton = xml.CreateElement("MenuBotton");
    MenuBottonId = xml.CreateAttribute("MenuBottonId");
    MenuBottonId.Value = "3";
    MenuBottonName = xml.CreateAttribute("MenuBottonName");
    MenuBottonName.Value = "open";
    MenuBottonSrc = xml.CreateAttribute("MenuBottonSrc");
    MenuBottonSrc.Value="xxx.xxx.xx";
    MenuBotton.Attributes.Append(MenuBottonId);
    MenuBotton.Attributes.Append(MenuBottonName);
    MenuBotton.Attributes.Append(MenuBottonSrc);
    TitleMenu.AppendChild(MenuBotton); TitleMenu = xml.CreateElement("TitleMenu");
    TitleMenuId = xml.CreateAttribute("id");
    TitltMenuName = xml.CreateAttribute("Name");
    TitleMenuId.Value = "2";
    TitltMenuName.Value = "edit";
    TitleMenu.Attributes.Append(TitleMenuId);
    TitleMenu.Attributes.Append(TitltMenuName);
    Menu.AppendChild(TitleMenu); MenuBotton = xml.CreateElement("MenuBotton");
    MenuBottonId = xml.CreateAttribute("MenuBottonId");
    MenuBottonId.Value = "4";
    MenuBottonName = xml.CreateAttribute("MenuBottonName");
    MenuBottonName.Value = "copy";
    MenuBottonSrc = xml.CreateAttribute("MenuBottonSrc");
    MenuBottonSrc.Value="xxx.xxx.xx";
    MenuBotton.Attributes.Append(MenuBottonId);
    MenuBotton.Attributes.Append(MenuBottonName);
    MenuBotton.Attributes.Append(MenuBottonSrc);
    TitleMenu.AppendChild(MenuBotton); xml.Save("c:\\test.xml");}生成的XML<?xml version="1.0" encoding="GB2312"?>
    <XML id="Menus">
      <Menu>
        <TitleMenu id="1" Name="file">
          <MenuBotton MenuBottonId="3" MenuBottonName="open" MenuBottonSrc="xxx.xxx.xx" />
        </TitleMenu>
        <TitleMenu id="2" Name="edit">
          <MenuBotton MenuBottonId="4" MenuBottonName="copy" MenuBottonSrc="xxx.xxx.xx" />
        </TitleMenu>
      </Menu>
    </XML>
      

  4.   

    一点小错误,改正。。private void Form1_Load(object sender, System.EventArgs e)
    {
    XmlDocument xml = new XmlDocument();
    XmlDeclaration declareation = xml.CreateXmlDeclaration("1.0", "GB2312", null);
    xml.AppendChild(declareation); XmlElement XML, Menu, TitleMenu, MenuBotton;
    XmlAttribute XMLID, TitleMenuId, TitltMenuName, MenuBottonId, MenuBottonName, MenuBottonSrc;

    XML = xml.CreateElement("XML");
    XMLID = xml.CreateAttribute("id");
    XMLID.Value = "Menus";
    xml.AppendChild(XML);
    XML.Attributes.Append(XMLID);

    Menu = xml.CreateElement("Menu");
    XML.AppendChild(Menu); TitleMenu = xml.CreateElement("TitleMenu");
    TitleMenuId = xml.CreateAttribute("id");
    TitltMenuName = xml.CreateAttribute("Name");
    TitleMenuId.Value = "1";
    TitltMenuName.Value = "file";
    TitleMenu.Attributes.Append(TitleMenuId);
    TitleMenu.Attributes.Append(TitltMenuName);
    Menu.AppendChild(TitleMenu); MenuBotton = xml.CreateElement("MenuBotton");
    MenuBottonId = xml.CreateAttribute("Id");
    MenuBottonId.Value = "3";
    MenuBottonName = xml.CreateAttribute("Name");
    MenuBottonName.Value = "open";
    MenuBottonSrc = xml.CreateAttribute("Src");
    MenuBottonSrc.Value="xxx.xxx.xx";
    MenuBotton.Attributes.Append(MenuBottonId);
    MenuBotton.Attributes.Append(MenuBottonName);
    MenuBotton.Attributes.Append(MenuBottonSrc);
    TitleMenu.AppendChild(MenuBotton); TitleMenu = xml.CreateElement("TitleMenu");
    TitleMenuId = xml.CreateAttribute("id");
    TitltMenuName = xml.CreateAttribute("Name");
    TitleMenuId.Value = "2";
    TitltMenuName.Value = "edit";
    TitleMenu.Attributes.Append(TitleMenuId);
    TitleMenu.Attributes.Append(TitltMenuName);
    Menu.AppendChild(TitleMenu); MenuBotton = xml.CreateElement("MenuBotton");
    MenuBottonId = xml.CreateAttribute("Id");
    MenuBottonId.Value = "4";
    MenuBottonName = xml.CreateAttribute("Name");
    MenuBottonName.Value = "copy";
    MenuBottonSrc = xml.CreateAttribute("Src");
    MenuBottonSrc.Value="xxx.xxx.xx";
    MenuBotton.Attributes.Append(MenuBottonId);
    MenuBotton.Attributes.Append(MenuBottonName);
    MenuBotton.Attributes.Append(MenuBottonSrc);
    TitleMenu.AppendChild(MenuBotton); xml.Save("c:\\test.xml");}
    xml
    <?xml version="1.0" encoding="GB2312"?>
    <XML id="Menus">
      <Menu>
        <TitleMenu id="1" Name="file">
          <MenuBotton Id="3" Name="open" Src="xxx.xxx.xx" />
        </TitleMenu>
        <TitleMenu id="2" Name="edit">
          <MenuBotton Id="4" Name="copy" Src="xxx.xxx.xx" />
        </TitleMenu>
      </Menu>
    </XML>
      

  5.   

    XmlTextWriter tw = new XmlTextWriter(@"..\..\menu.xml", null);
    tw.Formatting = Formatting.Indented;
    tw.WriteStartDocument();tw.WriteStartElement("XML");
    tw.WriteAttributeString("id","Menus");
    tw.WriteStartElement("Menu");
    tw.WriteStartElement("TitleMenu");
    tw.WriteAttributeString("id", "1");
    tw.WriteAttributeString("Name", "file");
    //etc.
    tw.WriteEndElement();
    //etc.
    tw.WriteEndDocument();tw.Flush();
    tw.Close();里面的元素、属性、字段值就自己添加吧,一定要注意嵌套元素。
      

  6.   

    cnhgj(戏子)(猛男壹号) 的方法更直观一些。如果是比较大的XML文档,或者生成文档之后要添加节点,就用猛男的。如果是小的XML文档,且只需一次生成,可以考虑用我的方法。
      

  7.   

    cnhgj(戏子)(猛男壹号) 大哥我要的不是这样,我要是要它递归节点,要是一个一个的加,那也没必要了不是?
      

  8.   

    PHP实现如下:
    function ShowMenu($Parent_id) {
    global $db,$db_t,$dir,$tree_id,$User_id,$Username;
    if ($Parent_id=="")
    $Parent_id=0;
    $query="select * from $db_t[Menus] where Parent_id=$Parent_id order by PRI asc"; 
    $num=Query_db($query,'num');
    if ($num>0) {
    $result=Query_db($query,'result');
    for ($i=0;$i<$num;$i++) {
    $array=Rerult_to_array ($result);
    $query1="select ID from $db_t[Power] where User_id=$User_id and Menu_id=$array[ID]";
    $num1=Query_db($query1,'num');
    if ($num1>0 || $Username=='admin') {
    if ($array[Parent_id]==$tree_id) {
    $title="<TitleMenu Id='$array[ID]' Name='$array[Txt]'>\n";
    $button="</TitleMenu>\n";
    }
    else {
    if ($array[Icon]=="")
    $array[Icon]='None.gif';
    $Url_info=$array[Parent_id].'@'.$array[Url].'@'.$array[Txt].'@'.$User_id.'@'.$Username;
    $title="<MenuBotton Id='$array[ID]' Name='$array[Txt]' Src='frame.php?Parent=$Url_info' Ico='$dir[icon]/$array[Icon]' Order='$array[ID]$array[Line]'>\n";
    $button="</MenuBotton>\n";
    }
    echo "$title";
    ShowMenu($array[0]);
    echo "$button";
    }
    }
    }
      

  9.   

    递归结点那就递归生成,按照cnhgj(戏子)(猛男壹号)的些个递归
      

  10.   

    不要XML递归呀,小弟关键不会呀!
      

  11.   

    你想循环增加?
    你的OPEN,EDIT,COPY。这些你想怎么处理。。
    private void Form1_Load(object sender, System.EventArgs e)
    {
    XmlDocument xml = new XmlDocument();
    XmlDeclaration declareation = xml.CreateXmlDeclaration("1.0", "GB2312", null);
    xml.AppendChild(declareation); XmlElement XML, Menu;
    XmlAttribute XMLID;

    XML = xml.CreateElement("XML");
    XMLID = xml.CreateAttribute("id");
    XMLID.Value = "Menus";
    xml.AppendChild(XML);
    XML.Attributes.Append(XMLID);

    Menu = xml.CreateElement("Menu");
    XML.AppendChild(Menu); Menu.AppendChild(CreateElement(xml, "1", "file", "3", "open", "xxx.xxx.xx"));
    Menu.AppendChild(CreateElement(xml, "2", "edit", "4", "copy", "xxx.xxx.xx"));

    xml.Save("c:\\test.xml");
    }private XmlElement CreateElement(XmlDocument xml, string Menuid_v, string MenuName_v, string Bottonid_v, string BottonName_v, string BottonSrc_v)
    {
    XmlElement TitleMenu, MenuBotton;
    XmlAttribute TitleMenuId, TitltMenuName, MenuBottonId, MenuBottonName, MenuBottonSrc;

    TitleMenu = xml.CreateElement("TitleMenu");
    TitleMenuId = xml.CreateAttribute("id");
    TitltMenuName = xml.CreateAttribute("Name");
    TitleMenuId.Value = Menuid_v;
    TitltMenuName.Value = MenuName_v;
    TitleMenu.Attributes.Append(TitleMenuId);
    TitleMenu.Attributes.Append(TitltMenuName); MenuBotton = xml.CreateElement("MenuBotton");
    MenuBottonId = xml.CreateAttribute("Id");
    MenuBottonId.Value = Bottonid_v;
    MenuBottonName = xml.CreateAttribute("Name");
    MenuBottonName.Value = BottonName_v;
    MenuBottonSrc = xml.CreateAttribute("Src");
    MenuBottonSrc.Value = BottonSrc_v;
    MenuBotton.Attributes.Append(MenuBottonId);
    MenuBotton.Attributes.Append(MenuBottonName);
    MenuBotton.Attributes.Append(MenuBottonSrc);
    TitleMenu.AppendChild(MenuBotton); return TitleMenu;
    }
      

  12.   

    //递归部分
    //读取DataRead
    while(dr.Read())
    {
             TitleMenu = xml.CreateElement("TitleMenu");
    TitleMenuId = xml.CreateAttribute("id");
    TitltMenuName = xml.CreateAttribute("Name");
    TitleMenuId.Value = dr["id"];
    TitltMenuName.Value = dr["Name"];
    TitleMenu.Attributes.Append(TitleMenuId);
    TitleMenu.Attributes.Append(TitltMenuName);
    Menu.AppendChild(TitleMenu);}
      

  13.   

    写一个方法。。然后调用就是Menu.AppendChild(CreateElement(xml, "1", "file", "3", "open", "xxx.xxx.xx"));
      

  14.   

    倒是ASP和PHP可以轻松实现,用ASPX就不会了,用前两者实现是用字符串累加的方法,那到了ASPX时代应该就直接用XML类来实现 了,可是,小弟我实在不会!XML对我来说就像天书
      

  15.   

    还有什么不会?代码全写给你了。照抄就是,如果要循环............
    for(int i=0;i<10;i++)
    {
          Menu.AppendChild(CreateElement(xml, i.ToString(), "file", "3", "open", "xxx.xxx.xx"));
    }xml.Save("c:\\test.xml");
      

  16.   

    瞧好了您:
    XmlDocument xmlDoc = new XmlDocument();
    XmlElement nodRoot;
    nodRoot = (XmlElement)xmlDoc.AppendChild(xmlDoc.CreateElement("Root"));
    string strConn,strSQL;
    strConn = "你的数据库连接字符串";
    strSQL = "筛选数据的sql for xml auto,elements";
    SqlConnection cn = new SqlConnection(strConn);
    cn.Open();
    SqlCommand cmd = new SqlCommand(strSQL,cn);
    XmlReader rdr = cmd.ExecuteXmlReader();
    do 
    nodRoot.AppendChild(xmlDoc.ReadNode(rdr));
    while(rdr.EOF == false);

    rdr.Close();
    cn.Close();
    string strPathToXml = "C:\\MyData.XML";
    xmlDoc.Save(strPathToXml);
      

  17.   

    DataGrid.WriteXml() 就可以
    你甚至可以用在 IIS 中配置 SQL XML 支持(SQL Server) 来输出xml
      

  18.   

    你可以使用DataSet来生成你的XML文件,
    1.读取parentId = 0的数据SELECT * FROM Menus WHERE ParentID = 0,将此数据填充到DataSet(表Parnet)
    2.读取parentId <> 0的数据SELECT * FROM Menus WHERE ParentID <> 0,将此数据填充到DataSet(表Child)
    3.设置关系,
        DataColumn parentCol;
        DataColumn childCol;    parentCol = ds.Tables["Parent"].Columns["ID"];
        childCol = ds.Tables["Child"].Columns["ParentID"];    DataRelation relParentChild;
        relParentChild= new DataRelation("ParentChild", parentCol, childCol);    ds.Relations.Add(relParentChild);
    4.生成XML文件
      

  19.   

    我也讨厌小日本的....
    Function GetTotal()  递归部分
    //读取DataRead
    while(dr.Read())
    {
             TitleMenu = xml.CreateElement("TitleMenu");
    TitleMenuId = xml.CreateAttribute("id");
    TitltMenuName = xml.CreateAttribute("Name");
    TitleMenuId.Value = dr["id"];
    TitltMenuName.Value = dr["Name"];
    TitleMenu.Attributes.Append(TitleMenuId);
    TitleMenu.Attributes.Append(TitltMenuName);
    Menu.AppendChild(TitleMenu);}
      

  20.   

    呵呵,cnhgj(戏子) (猛男壹号) (配角) 就可以
      

  21.   

    SELECT '<XML id=''Menus''><Menu>'
      SELECT
        1                   AS Tag, 
        NULL                AS Parent,
        TitleMenu.ID        AS [TitleMenu!1!Id],
        TitleMenu.Name      AS [TitleMenu!1!Name],
        NULL                AS [MenuBotton!2!Id],
        NULL                AS [MenuBotton!2!Name],
        NULL                AS [MenuBotton!2!Src]
      FROM [Menu] TitleMenu  UNION ALL  SELECT 
        2 AS Tag, 
        1 AS Parent,
        TitleMenu.ID,
        NULL,
        MenuBotton.ID,
        MenuBotton.Name,
        MenuBotton.Src
      FROM [Menu] MenuBotton,[Menu] TitleMenu
      WHERE MenuBotton.ParentID=TitleMenu.ID
      ORDER BY [TitleMenu!1!Id] ASC, [MenuBotton!2!Id] ASC
      FOR XML EXPLICIT  SELECT '</Menu></XML>'
    楼主要的
      

  22.   

    我要递归生成XML和树,再撒100分!
      

  23.   

    楼主干嘛一定要用递归 效率很低的
    既然 MSSQL 2000 直接提供了 对 XML 的支持又干嘛不用
    而要用一种吃力不讨好的方法...
      

  24.   

    从数据库中提出来转化成XML不知道是不是?
    <%@ Import Namespace="System.Data"%>
    <%@ Import Namespace="System.Data.SqlClient"%>
    <script Language="C#" runat="server">
    void Page_Load(Object sender,EventArgs e)
    {
    string strConn,strSQL;
    DataSet ds=new DataSet();
    SqlConnection Conn=null;
    SqlDataAdpter da=null;strConn="server=localhost;uid=;pwd=;database=;";
    strSQL="select * from 表名";Conn=new SqlConnection=(strConn);
    da=new SqlDataAdapter(strSQL,strConn);da.Fill(ds);
    ds.WriteXml(Server.MapPath("aa.xml"));
    Response.Write("Xml File Generated");
    }
    </script>
      

  25.   

    受不了!DataSet.WriteXml(string fileName)不能满足你的需求?
      

  26.   

    <%@Page Langauge="C#" Debug="true"%>
    <%@ Import Namespace="System"%>
    <%@ Import Namespace="System.Data"%>
    <%@ Import Namespace="System.Data.SqlClient"%>
    <Script runat="server">
    void Page_Load(object sender,EventArgs e)
    {
    GetMenuData();
    MakeXmlTree();
    }
    void GetMenuData()
    {
    if (ViewState["MenuData"]==null)
    {
    string SelectCommand = "select * from Menus";
    //string ConnectionString = 数据库连接字符串;
    SqlDataAdapter myAdapter = new SqlDataAdapter(SelectCommand,ConnectionString);
    DataSet ds = new DataSet();
    myAdapter.Fill(ds);
    ViewState["MenuData"] = ds;
    }
    }
    void MakeXmlTree()
    {
    Response.Write("Xml id='Menus'");
    Reeponse.Write("<Menu>");
    MakeTitleMenu()
    Response.Write("</Menu>")
    }
    void MakeTitleMeun()
    {
    DataView dv = new DataView(((DataSet)(ViewState["MenuData"])).Tables[0]);
    dv.RowFilter = "ParentID=0";
    foreach(DataRowView drv in dv)
    {
    string BeginTitleMenuMark = "<TitleMenu Id='" + drv["ID"].ToString() + "' Name='" + drv["Name"].ToString() + "'>";
    string EndTitleMenuMark = "</TitleMenu>";
    Response.Write(BeginTitleMenuMark);
    MakeMenuButton(drv["ID"].ToString());
    Response.Write(EndTitleMenuMark);
    }
    }
    void MakeMenuButton(parentId)
    {
    DataView drv = DataView dv = new DataView(((DataSet)(ViewState["MenuData"])).Tables[0]);
    dv.RowFilter = "ParentID=" + parentId;
    foreach(DataRowView drv in dv)
    {
    string BeginMenuButtonMark = "<MenuButton Id='" + drv["ID"].ToString() + "' Name='" + drv["Name"].ToString() + "' Src='" + drv["Src"].ToString() +"'>";
    string EndMenuButtonMark = "</MenuButton>";
    Response.Write(BeginTitleMenuMark);
    Response.Write(EndTitleMenuMark);
    }
    }
    </Script>
    <html>
    <head></head>
    <body>
    </body>
    </html>
    上面的代码是直接打印在HTML页上,楼主要输出到磁盘的话,自己去查一下使用Stream生成文本文件就可以了.