xsl参数:<xsl:param name=""></xsl:param> 等等

xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<messages>
<message name="msg23">Error 23: The drive is full.</message>
<message name="msg42">Error 42: The file is not found.</message>
</messages>


xsl文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<!-- these 2 elements effectively assign
$messages = resources/en.xml/<messages>,
then $messages is used in the "localized-message" template -->
<xsl:param name="lang">message</xsl:param>
<xsl:variable name="messages"
select="document(concat('../xmlfiles/', $lang, '.xml'))/messages"/>

<xsl:template name="msg23" match="msg23">
<xsl:call-template name="localized-message">
<xsl:with-param name="msgcode">msg23</xsl:with-param>
</xsl:call-template>
</xsl:template>

<xsl:template name="localized-message">
<xsl:param name="msgcode"/>
<!-- show message string -->
<xsl:message terminate="yes">
<xsl:value-of select="$messages/message[@name=$msgcode]"/>
</xsl:message>
</xsl:template>

</xsl:stylesheet>

说明:
<xsl:param name="lang">message</xsl:param>
这一行是声明了参数名,并给定值为:"message"字符串.
<xsl:variable name="messages"
select="document(concat('../xmlfiles/', $lang, '.xml'))/messages"/>
这一行也是定义了参数名,与上一行不同的是它用了上一行的值:"$lang",最终得到的值为:"document(../xmlfiles/message.xml)/messages".这两个变量为全局变量。

<!-- a-->
<xsl:template name="msg23" match="msg23">
<xsl:call-template name="localized-message">
<xsl:with-param name="msgcode">msg23</xsl:with-param>
</xsl:call-template>
</xsl:template>

<!-- b -->
<xsl:template name="localized-message">
<xsl:param name="msgcode"/>
<!-- show message string -->
<xsl:message terminate="yes">
<xsl:value-of select="$messages/message[@name=$msgcode]"/>
</xsl:message>
</xsl:template>

上面两部份是紧密联系的(这里将他们分为a,b部分),a部份调
用了b部份,并且对b部分的参数"msgcode"进行了传值,也就是:
<xsl:with-param name="msgcode">msg23</xsl:with-param>

在b部份中的<xsl:param/>声明的变量为局部变量。引用了全局变量:"messages",读到这里,是不是有一种似曾相识的感觉?


html文件:
<html>
<head>

<script src="../js/commUtil.js"></script>

<script>
function parseXml() {
var xslDoc = commLoad("../xsl_files/message.xsl");
var xmlDoc = commLoad("../xmlfiles/message.xml");
var showStr = xmlDoc.documentElement.transformNode(xslDoc);
var divContent = document.getElementById("divContent");
divContent.innerHTML = showStr;
}
</script>


</head>
<body>

<div id="divContent"></div>
<input type="button" onclick="parseXml()" />


</body>
</html>


js代码:
/**
* @param url <xml>文档所在位置
* @return retDom xml的dom
* */
function commLoad(URL){
var retDom = null;
try{
retDom = new ActiveXObject('Microsoft.XMLDOM');
retDom.async = false;
retDom.load(URL);
}catch(e){
retDom = document.implementation.createDocument("", "", null);
retDom.async = false;
retDom.load(URL);
}

return retDom;
}

/**
* @param xml <xml>文档
* @return retDom xml的dom
* */
function commLoadXML(xml){
var retDom = null;
try{
retDom = new ActiveXObject('Microsoft.XMLDOM');
retDom.async = false;
retDom.loadXML(xml);
}catch(e){
var oParser = new DOMParser();
retDom = oParser.parseFromString(xml,"text/xml");
}

return retDom;
}

细心的人可以从html文件(代码)里得到三个folder。只要按照目录来做,并把html文件的绝对路径放到浏览器里(用浏览器访问该html文件)你将会看到这样的结果:[quote]Error 23: The drive is full.Error 42: The file is not found.
[/quote]
[list]
[*][color=blue]参考资料:Microsoft XML Core Services(MSXML)4.0[/color]
[/list]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值