XSLT版本1中是否有URL编码功能? 我在javascript中需要类似于encodeURIComponent函数的东西吗?
因为我正在使用.NET平台,因为XSLT应用于Sharepoint页面,因此这是不可能的。有没有办法对此购买进行编码,在下面的XML片段中调用javascript encode函数:
<xsl:template name="BuildLink">
<xsl:param name="PrimarySubject" />
<xsl:text>?PrimarySubject=</xsl:text>
<xsl:value-of select="$PrimarySubject" />
</xsl:template>
谢谢,
答案 0 :(得分:13)
您可以使用嵌入在XSLT中的JScript ...
<msxsl:script language="JScript" implements-prefix="custom">
function uriencode(string) {
return encodeURIComponent(string);
}
</msxsl:script>
并将其称为custom:uriencode( url_to_encode )
您首先需要通过添加<xsl:stylesheet ...
标记来定义命名空间
xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:custom="http://youdomain.ext/custom"
<强> [更新] 强>
我为自定义命名空间设置的网址可以是任何内容.. it is just a unique identifier ..
(该链接的结论是,如果您不使用网址作为标识符,则不会产生混淆。)
[udpdate 2]
一些补充信息
如果您使用MSXML6,那么您需要使用AllowXsltScript
属性手动允许在XSLT中编写脚本..(reference)
根据您加载xslt的方式及其设置,请查看Script Blocks Using msxsl:script上有关如何使用脚本的示例
答案 1 :(得分:7)
这些XSLT 1.0 stylesheets可用于执行URL编码/解码:
描述:只是一个非常小的子集 ASCII字符可以安全 嵌入在URI中。外面的人物 必须使用转义此集合 所谓的“URL编码”或 “%-escaping”。人物是 根据一些转换为字节 编码(如果可能,ASCII)和那些 每个字节都写为'%' 后跟2个十六进制数字。该 编码用作此基础 转换可以是任何东西,但趋向于 由上下文决定 正在使用URI。最近和 未来的标准使用UTF-8,但遗留下来 应用包括很多 广泛部署的服务器端 HTML表单数据的处理器假定 ISO-8859-1。
例如,问候语“¡Hola, César!“如果它可以嵌入到URI中 写成如下: %A1Hola%2C%20C%E9sar! (...假设 ISO-8859-1作为编码的基础。 如果它是基于UTF-8,那么它会 是%C2%A1Hola%2C%20C%C3%A9sar!)。
url-encode.xsl演示网址编码 作为一个传入的任意字符串 参数名为iso-string。它假定 ISO-8859-1将成为该基础 URL编码。它应该兼容 使用任何XSLT 1.0处理器。
解码基于ISO-8859-1 URL编码的字符串使用类似的 技术。请参阅url-decode.xsl以获取 演示。它的url参数是字符串 要解码。
答案 2 :(得分:1)
没有一个。 XSLT不了解URL和HTML。
根据您使用的语言和平台,您可以使用XSLT extension来执行此操作。
答案 3 :(得分:1)
在某些情况下,您可以在此处使用EXSLT(解析器提供的扩展程序):Dave Pawson's XSLT FAQ。
但是,XSLT是Turing完整的,所以你可以在XSLT本身写一个基本的URL编码器,理论上(我不会尝试)。