Евг*_*ний 11 xml xslt msxml cross-platform
我正在编写一些我想在linux和Windows下使用的xlst文件.在这个文件中,我使用node-set函数,该函数在不同的命名空间中为MSXML和xsltproc(分别为"urn:schemas-microsoft-com:xslt"和" http://exslt.org/common ")声明.是否有任何平台独立的方式使用节点集?
您可以使用function-available()函数来确定应该使用哪个函数:
<xsl:choose>
<xsl:when test="function-available('exslt:node-set')">
<xsl:apply-templates select="exslt:node-set($nodelist)" />
</xsl:when>
<xsl:when test="function-available('msxsl:node-set')">
<xsl:apply-templates select="msxsl:node-set($nodelist)" />
</xsl:when>
<!-- etc -->
</xsl:choose>
Run Code Online (Sandbox Code Playgroud)
您甚至可以将此逻辑包装在命名模板中,并使用nodeset作为参数调用它.
是的,有一个很好的通用解决方案.
EXSLT的函数通用:node-set()可以实现为内联Javascript函数,因此可以在任何支持Javascript的浏览器中使用(几乎所有主流浏览器都没有例外).
这项技术最初是由Julian Reschke发现的,在他发布于xsl-list之后,由David Carlisle公布.在David Carlisle的博客上还有一个指向测试页面的链接,该页面显示了如此实现的common:node-set()函数是否适用于您选择的浏览器.
总结一下:
享受!
Firefox 3 在其客户端 XSLT 处理中实现了节点集(作为 EXSLT 2.0 命名空间改进的一部分)。
也许不完全是您正在寻找的答案 - 但它可能是,具体取决于您的问题的背景。;-)