我试图以一种特殊的方式连接两个字符串数组。数组如下所示:
结果应该是一个字符串:“a-3/b/c-4”。
但是使用我的代码,我得到了这样的结果(只返回最后一部分):“C-4”
代码:
<xsl:function name="functx:k" as="xs:string">
<xsl:param name="arg1" as="xs:string*"/>
<xsl:param name="arg2" as="xs:string*"/>
<xsl:variable name="indexedPath"/>
<xsl:for-each select="$arg1">
<xsl:variable name="i" select="position()" as="xs:integer"/>
<xsl:variable name="indexedPathNew" select="concat($indexedPath, $arg1[$i], $arg2[$i], '/')"/>
<xsl:variable name="indexedPath" select="$indexedPathNew"/>
<xsl:choose>
<xsl:when test="$i=count($arg1)">
<xsl:value-of select="$indexedPathNew"/>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:function>第二种可能是将这两个字符串连接起来:
结果应该是(一个字符串):'A-3/B/C-4‘。我认为分裂然后连接更容易(我没有这方面的任何代码,这只是一个想法)。
你能帮我找出我做错了什么,或者如何正确地做这件事吗?
发布于 2015-06-04 12:19:22
我觉得你只是想
<xsl:function name="functx:k" as="xs:string">
<xsl:param name="arg1" as="xs:string*"/>
<xsl:param name="arg2" as="xs:string*"/>
<xsl:sequence select="string-join(for $pos in 1 to count($arg1)
return concat($arg1[$pos], $arg2[$pos]), '/')"/>
</xsl:function>假设XSLT/XPath3.0(例如Saxon 9.6已经提供),您可以将代码简化为
<xsl:function name="functx:k" as="xs:string">
<xsl:param name="arg1" as="xs:string*"/>
<xsl:param name="arg2" as="xs:string*"/>
<xsl:sequence select="string-join(for-each-pair($arg1, $arg2, concat#2), '/')"/>
</xsl:function>请注意,您的参数是字符串序列,而不是数组。在版本3.1:http://www.w3.org/TR/xpath-31/#id-arrays中,您可能会得到数组作为语言的一部分。
https://stackoverflow.com/questions/30643316
复制相似问题