我对XSL(T)很新颖。我不确定它的相关性,但我正在与IBM DataPower合作。XSLT - 从递归模板变量赋值
我试图使用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函数获取版本。我认为这里没有包含代码,因为我认为它会混淆这个例子。
我在正确的轨道上吗?任何帮助或指针将不胜感激。我很乐意根据需要编辑和添加更多信息。
谢谢, 克里斯
“*在模板中,我希望使用一个元素跟踪URI并将这两个值捕获到变量中。*“这不会有效:模板中定义的变量将被限制在该模板的范围内 –
很高兴知道,我也想知道,我会在今天晚些时候看到你的答案。我认为可能不仅仅是从URI路径中提取两个变量,而是从递归路径开始,所以我想对'/'进行分割,但是找到了这是不是直接可能的,递归可能是一种可能的解决方法。方式更多的信息比你想要的大声笑...但多数民众赞成什么让我首先递归 –
递归会有道理,如果你有多个前缀/后缀对,并且需要提取第n个标记。下面是一个示例,显示如何在最后一个标记之前获取标记 - 虽然使用了统一的分隔符:http://stackoverflow.com/questions/38848374/how-to-find-last -to-预览工作及商店到我场功能于XSLT/38848925#38848925 –