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 下拉菜单中,效果如下图:
<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 下拉菜单中,效果如下图:
<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]
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的代码可能会有问题
,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>');