利用xml和xsl自动生成菜单

autoMakeMenus.xml

<?xml version="1.0" encoding="GB2312"?>
<TestMenus>
	<menuO id="01" name="中国移动总公司" phone=""  address="中国 北京" leader="" type="" create_date="" description="" parentid="">
    <menuOU id="001" name="四川移动分公司" phone=""  address="四川 成都" leader="" type="" create_date="" description="" parentid="">
      <menuOU id="0001" name="成都移动分公司" phone=""  address="" leader="" type="" create_date="" description="" parentid="">
        <menuOU id="00001" name="高新区分公司" phone="110476592"  address="" leader="" type="" create_date="" description="" parentid=""/>
        <menuOU id="00002" name="双流县分公司" phone="110476592"  address="" leader="" type="" create_date="" description="" parentid=""/>
      </menuOU>
		</menuOU>
  </menuO>
</TestMenus>

 

autoMakeMenus.xsl

<?xml version="1.0" encoding="GB2312" ?>
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0"> 
	
<xsl:template match="menuO">
		<img src="book.gif">
		<xsl:attribute name="onclick">OpenOrCloseSubTree(allDivSubTreeObj<xsl:value-of  select="@id"/>)</xsl:attribute>
		</img>
	
		<font color="green">
			<B><xsl:value-of  select="@name"/> </B>
		</font>
		
		<div  style="display:none">
			<xsl:attribute name="id">allDivSubTreeObj<xsl:value-of  select="@id"/></xsl:attribute>
			<xsl:apply-templates select="menuOU">
			  <xsl:with-param name = "A" >1</xsl:with-param> 
			  <xsl:with-param name = "B" ><xsl:value-of  select="@id"/></xsl:with-param> 
			</xsl:apply-templates >
		</div>
		<p/>
</xsl:template>

<xsl:template  match="WstOU"> 
		<xsl:param name = "A" /> 
		<xsl:param name = "B" /> 

	<table border="0" width="176" height="26">
		<tr> 
			<td height="20" width="15" valign ="top">
				<img src="book.gif">
					<xsl:attribute name="onclick">OpenOrCloseSubTree(subTreeDiv<xsl:value-of  select="@id"/>)</xsl:attribute>
				</img>
			</td>
			
			<td height="20" width="145" valign ="top"  >
					<input type="checkbox">
						<xsl:attribute name="value"><xsl:value-of  select="@id"/> 
						</xsl:attribute>
						<xsl:attribute name="id">CHECKOBJ<xsl:value-of select = "$B" /><xsl:value-of select = "$A" />
						</xsl:attribute>
						<xsl:attribute name="onclick">clickNode("<xsl:value-of select = "$B" />","<xsl:value-of select = "$A" />")</xsl:attribute>
					</input>
					
					<input type="hidden">
							<xsl:attribute name="id">CHECKTXT<xsl:value-of select = "$B" /><xsl:value-of select = "$A" /></xsl:attribute>
							<xsl:attribute name="value"><xsl:value-of  select="@name" />
							</xsl:attribute>
					</input>
					
			 		<xsl:value-of  select="@name" /> 
			 		<div style="display">
						<xsl:attribute name="id">subTreeDiv<xsl:value-of  select="@id"/> 
						</xsl:attribute>
			 		
            <xsl:apply-templates select="WstOU">
              <xsl:with-param name = "A" select="$A+1" />
              <xsl:with-param name = "B" select="$B"/>
            </xsl:apply-templates >  
					</div>
			 </td>
		</tr>
	</table>
</xsl:template>

</xsl:stylesheet>  

 

index.htm

<HTML>
<HEAD>
<script>

function init() {
		var xslDoc
		xmlDoc = loadDOM("autoMakeMenus.xml");
		xslDoc = loadDOM("autoMakeMenus.xsl");
		try{
			folderTree.innerHTML = xmlDoc.documentElement.transformNode(xslDoc);
			alert(folderTree.innerHTML);
		}catch (e)
		{
			alert(e.description);
		}
}

function loadDOM(file) {
   var dom;
   try {
     dom = makeDOM(null);
     dom.load(file);
   } catch (e) {
     alert(e.description);
   }
   return dom;
}

function makeDOM(progID) {
  if (progID == null) {
    progID = "msxml2.DOMDocument.4.0";
  }

  var dom;
  try {
    dom = new ActiveXObject(progID);
    dom.async = false;
    dom.validateOnParse = false;
    dom.resolveExternals = false;
  }catch (e) {
    alert(e.description);
  }
  return dom;
}

var strAllOUNames="";

function clickNode(OID,OuID) {
	var i=0;
	var obj;
	var objname;
	var PathCount=OuID;
	strAllOUNames="";
	
	for(i=PathCount+1;i<5000;i++) {
		objname="CHECKOBJ"+OID+i;
		try{
			obj=document.all(objname);
			if(obj==null)
				break;
			obj.checked=false;
		}catch(e){
			break;
		}
	}
	
	for(i=1;i<PathCount;i++) {
		objname="CHECKOBJ"+OID+i;
		obj=document.all(objname);
		obj.checked=true;
		objname="CHECKTXT"+OID+i;
		obj=document.all(objname);
		strAllOUNames+=obj.value;
		strAllOUNames+="/";
	}
	
	objname="CHECKOBJ"+OID+OuID;
	obj=document.all(objname);
	if(obj.checked==true) {
		objname="CHECKTXT"+OID+OuID;
		obj=document.all(objname);
		strAllOUNames+=obj.value;
		strAllOUNames+="/";
	}
}

function OpenOrCloseSubTree(targetelement) {
	if (targetelement.style.display=="none")
	    targetelement.style.display='';
	else
	    targetelement.style.display="none";
}

function OnOKButSet() {
	if(strAllOUNames=="") {
		alert("请选择公司");
		return ;
	}
	alert(strAllOUNames);
	window.returnValue=strAllOUNames;
	close();
}

function OnCloseWindow() {
	close();
}
	
</script>
</HEAD>
<BODY ONLOAD="init()" >
<table border="0" >
	<tr>
		<td >
			<DIV id="folderTree" STYLE="PADDING-TOP: 8px">
				<input type="button" Value="确定" οnclick="OnOKButSet()">
				<input type="button" Value="取消" οnclick="OnCloseWindow()">
			</DIV>
	 	</td>
	</tr>
</table>
</BODY>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值