首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSLT连接两个数组

XSLT连接两个数组
EN

Stack Overflow用户
提问于 2015-06-04 12:01:21
回答 1查看 339关注 0票数 2

我试图以一种特殊的方式连接两个字符串数组。数组如下所示:

  • 第一个数组(arg1):'A','B','C‘
  • 第二个数组(arg2):'-3‘、’、'-4‘

结果应该是一个字符串:“a-3/b/c-4”。

但是使用我的代码,我得到了这样的结果(只返回最后一部分):“C-4”

代码:

代码语言:javascript
复制
<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/B/C
  • 第二串:'-3//-4‘

结果应该是(一个字符串):'A-3/B/C-4‘。我认为分裂然后连接更容易(我没有这方面的任何代码,这只是一个想法)。

你能帮我找出我做错了什么,或者如何正确地做这件事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-04 12:19:22

我觉得你只是想

代码语言:javascript
复制
<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已经提供),您可以将代码简化为

代码语言:javascript
复制
<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中,您可能会得到数组作为语言的一部分。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30643316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档