我是XSL(T)的新手。我不确定它的相关性,但我正在使用IBM DataPower。
我正在尝试使用XSL来解析传入的URI,如下所示:
http://ip:port/Nucleus_v2.9.3/SomeEndPoint
我希望将版本(2.9.3)提取到一个变量中,将目标(SomeEndPoint)提取到第二个变量中。我试图使用一个带有两个参数的递归模板(上面的URI和斜杠字符)。在模板中,我想使用一个元素来跟踪URI并将这两个值捕获到变量中。
<xsl:template name="parseIncomingURI"> <xsl:param name="string" /> <xsl:param name="char" /> <xsl:choose> <xsl:when test="contains($string, $char) and contains($string, 'Nucleus_v')"> <xsl:call-template name="parseIncomingURL"> <xsl:with-param name="string" select="substring-after($string, $char)" /> <xsl:with-param name="char" select="$char" /> </xsl:call-template> </xsl:when> <xsl:otherwise> </xsl:otherwise> </xsl:choose> </xsl:template>
我不确定我正在尝试的是什么,我可能会误解模板的意图。我想在上面的“when”元素中分配版本,然后在“otherwise”中指定结束点变量(在递归中遇到最后一个斜杠后触发)。
为了它的价值,我只需在XSL的其他位置调用此模板,并将原始URI和'/'字符作为两个初始参数传递。我在“when”元素中意识到我需要通过一些substring-before和substring-after函数来获取版本。我没有包含这里的代码,因为我觉得它使这个例子变得混乱。
我是否在正确的轨道上?任何帮助或指针将不胜感激。我很乐意根据需要编辑和添加更多信息。
谢谢, 克里斯
答案 0 :(得分:1)
我认为你不需要这里的递归模板。您可以将版本解压缩为:
if((day < 1) || (day > 31)) return false;
,目的地为:
<xsl:variable name="version" select="substring-before(substring-after(URI, 'Nucleus_v'), '/')" />
这是一个纯粹的XSLT 1.0解决方案;如果您使用的是IBM DataPower,您还可以访问EXSLT Regular Expression extension functions(根据他们的文档)。