xml的内容如下:<NewDataSet>
<ds>
<SOFTID>1</SOFTID>
<SOFTNAME>ERP</SOFTNAME>
<PARENTID>0</PARENTID>
</ds>
<ds>
<SOFTID>2</SOFTID>
<SOFTNAME>总账</SOFTNAME>
<PARENTID>1</PARENTID>
</ds>
<ds>
<SOFTID>3</SOFTID>
<SOFTNAME>OA</SOFTNAME>
<PARENTID>0</PARENTID>
</ds>
<ds>
<SOFTID>4</SOFTID>
<SOFTNAME>OACRM</SOFTNAME>
<PARENTID>3</PARENTID>
</ds>
<ds>
<SOFTID>5</SOFTID>
<SOFTNAME>财务模块</SOFTNAME>
<PARENTID>1</PARENTID>
</ds>
</NewDataSet>如何通过脚本操作,将这些内容添加到select 下拉菜单中,效果如下图:

解决方案 »

  1.   

    UP 下  select里的还分层?
      

  2.   

    Default.aspx:<head runat="server">
        <title></title>
        <script type="text/javascript" src="jquery-1.3.2.min.js"></script>
        <script type="text/javascript">
            $(function() {
                $.ajax({
                    url: "Handler.ashx",
                    type: "GET",
                    dataType: "json",
                    error: function() { alert("error"); },
                    success: function(data) {
                        $.each(data.dataInfo, function(i, v) {
                            var option = new Option(v.SOFTNAME, v.ID);
                            document.getElementById("lst").options.add(option);
                        });
                    }
                });
            });
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <select id="lst"></select>
        </div>
        </form>
    </body>
    </html>
    xml:<?xml version="1.0" encoding="utf-8" ?>
    <NewDataSet>
      <ds>
        <SOFTID>1</SOFTID>
        <SOFTNAME>ERP</SOFTNAME>
        <PARENTID>0</PARENTID>
      </ds>
      <ds>
        <SOFTID>2</SOFTID>
        <SOFTNAME>总账</SOFTNAME>
        <PARENTID>1</PARENTID>
      </ds>
      <ds>
        <SOFTID>3</SOFTID>
        <SOFTNAME>OA</SOFTNAME>
        <PARENTID>0</PARENTID>
      </ds>
      <ds>
        <SOFTID>4</SOFTID>
        <SOFTNAME>OACRM</SOFTNAME>
        <PARENTID>3</PARENTID>
      </ds>
      <ds>
        <SOFTID>5</SOFTID>
        <SOFTNAME>财务模块</SOFTNAME>
        <PARENTID>1</PARENTID>
      </ds>
    </NewDataSet>Handler.ashx:
    [code=C#]
    <%@ WebHandler Language="C#" Class="Handler" %>using System;
    using System.Web;
    using System.Xml;
    public class Handler : IHttpHandler {
        
        public void ProcessRequest (HttpContext context) {
            context.Response.ContentType = "text/plain";
            XmlDocument doc = new XmlDocument();
            doc.Load(context.Server.MapPath("XMLFile.xml"));
            String str = "{dataInfo:[";
            for (int i = 0; i < doc.GetElementsByTagName("ds").Count; i++)
            {
                str += "{ID:\"" + doc.GetElementsByTagName("ds")[i].ChildNodes[0].InnerText + "\",SOFTNAME:\"" + doc.GetElementsByTagName("ds")[i].ChildNodes[1].InnerText + "\"},";
            }
            str = str.Substring(0, str.Length - 1) + "]}";
            context.Response.Write(str);
            context.Response.Flush();
        }
     
        public bool IsReusable {
            get {
                return false;
            }
        }}[/code]
      

  3.   

    用xslt最合适了
    Catalogue.xsl<?xml version="1.0" encoding="utf-8" ?><xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <xsl:output
    method="html"
    indent="yes"
    version="4.0" />

    <xsl:param name="name" />

    <xsl:template match="/">
    <select>
    <xsl:for-each select="//ds" >
    <xsl:if test="PARENTID=0">
    <option> <xsl:value-of select="SOFTNAME" /></option>
    </xsl:if>
    <xsl:if test="PARENTID=1">
    <option> |-<xsl:value-of select="SOFTNAME" /></option>
    </xsl:if>
    <xsl:if test="PARENTID=3">
    <option> |-OA <xsl:value-of select="SOFTNAME" /></option>
    </xsl:if>
    </xsl:for-each>
    </select>
    </xsl:template>
    </xsl:stylesheet>
    mouse.js
     var http=null;function mousebox(){ if(window.ActiveXObject){
    http= new ActiveXObject("Microsoft.XMLHTTP");
    }
    else if(window.XMLHttpRequest){
    http = new XMLHttpRequest();

    }
    http.open("get","Catalogue.xml?time="+new Date().getTime(),false);
    http.send(null);
    var xml = http.responseXML;

    if(window.ActiveXObject){
    var xsl = new ActiveXObject("MSXML2.FreeThreadedDomDocument.3.0");
    xsl.async = false;
    xsl.load("Cataologue.xsl");
    var template = new ActivwXObject("MSXML2.XSLTemplate");
    template.stylesheet = xsl;
    processor = template.createProcessor();

    processor.input = xml;
    processor.transform;

    document.getElementById('d1').innerHTML= processor.ouput;
    }else{
    var xsltProcessor = new XSLTProcessor();

    http = new XMLHttpRequest();
    http.open("get","Catalogue.xsl?time="+new Date().getTime(),false);
    http.send(null);

    xslStylesheet = http.responseXML;

    xsltProcessor.importStylesheet(xslStylesheet);
    alert(1)
    var fragment = xsltProcessor.transformToDocument(xml,document);
    document.getElementById('d1').innerHTML= new XMLSerializer().serializeToString(fragment);
    }
    }Catalogue.xml<NewDataSet>
    <ds>
    <SOFTID>1</SOFTID>
    <SOFTNAME>ERP</SOFTNAME>
    <PARENTID>0</PARENTID>
    </ds>
    <ds>
    <SOFTID>2</SOFTID>
    <SOFTNAME>总账</SOFTNAME>
    <PARENTID>1</PARENTID>
    </ds>
    <ds>
    <SOFTID>3</SOFTID>
    <SOFTNAME>OA</SOFTNAME>
    <PARENTID>0</PARENTID>
    </ds>
    <ds>
    <SOFTID>4</SOFTID>
    <SOFTNAME>OACRM</SOFTNAME>
    <PARENTID>3</PARENTID>
    </ds>
    <ds>
    <SOFTID>5</SOFTID>
    <SOFTNAME>财务模块</SOFTNAME>
    <PARENTID>1</PARENTID>
    </ds>
    </NewDataSet>
    MyHtml.html
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>MyHtml.html</title>

        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="this is my page">
        <meta http-equiv="content-type" content="text/html; charset=GB18030">
        <script type="text/javascript" src="mouse.js"></script>
        <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->  </head>
      
      <body onload="mousebox()">
        <div id="d1"></div>
      </body>
    </html>
    因为是linux,只在火狐上测试正常,ie没有测试,兼容ie的代码可能会有问题
      

  4.   

    5楼真的是高手啊!!!!XSLT运用的真熟练啊
      

  5.   

    var root=[]//存储顶级
    ,sec={}//存储2级
    //加载xml文件的dom对象
    ,dom=document.all?new ActiveXObject("microsoft.xmldom")://IE
    document.implementation.createDocument("","",null);//FF
    dom.async=false;
    dom.load("f.xml");
    var SOFTID=dom.getElementsByTagName('SOFTID'),SOFTNAME=dom.getElementsByTagName('SOFTNAME'),PARENTID=dom.getElementsByTagName('PARENTID'),pId='';
    for(var i=0;i<SOFTID.length;i++){//变量节点放入数组中并分组
      pId=PARENTID[i].firstChild.nodeValue;
      if(pId=='0')root[root.length]={v:SOFTID[i].firstChild.nodeValue,t:SOFTNAME[i].firstChild.nodeValue};//根节点
      else{
        if(sec['k'+pId])sec['k'+pId].push({v:SOFTID[i].firstChild.nodeValue,t:SOFTNAME[i].firstChild.nodeValue});
        else{
          sec['k'+pId]=[];//初始化对应的2级数组
          sec['k'+pId][0]={v:SOFTID[i].firstChild.nodeValue,t:SOFTNAME[i].firstChild.nodeValue};
        }
      }
    }
    document.write('<select>');
    var tpSec;
    for(var i=0;i<root.length;i++){
      document.write('<option value="'+root[i].v+'">'+root[i].t+'</option>');
      tpSec=sec['k'+root[i].v];
      if(tpSec)//存在2级
        for(var j=0;j<tpSec.length;j++)document.write('<option value="'+tpSec[j].v+'">┣'+tpSec[j].t+'</option>');
    }
    document.write('</select>');