首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

xsl参数:<xsl:param name=""></xsl:param> 之类

2012-11-22 
xsl参数:xsl:param name/xsl:param 等等xml文件:?xml version1.0 encodingUTF-8?messages

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文件)你将会看到这样的结果:引用Error 23: The drive is full.Error 42: The file is not found.

参考资料:Microsoft XML Core Services(MSXML)4.0

热点排行