循环并连接xslt中的数组

时间:2019-04-26 12:22:37

标签: xml xslt xslt-1.0

我试图循环一个数组并将非空值连接到一个变量。不用说我是XSLT的新手。请查看我编写的代码,并让我知道执行此操作的最佳方法。

\将附加在末尾,并且我还必须在值之间添加一个分隔符*。如果*和\在一起,则只有\应该出现,我们可以省略*。我相信逻辑是正确的。语法就是问题。

谢谢, 阿努普

<xsl:variable name="secondsegmentarray">
    <item>Data/Attribute1</item>
    <item>Data/Attribute2</item>
    <item>Data/Attribute3</item>
    <item>Data/Attribute4</item>
    <item>Data/Attribute5</item>
    <item>Data/Attribute6</item>
    <item>Data/Attribute7</item>
</xsl:variable>
<xsl:variable name="secondsegment">
    <xsl:value-of select="'\'">
    <xsl:for-each select="secondsegmentarray/item">
        <xsl:choose>
         <xsl:when test="$secondsegmentarray.item = '' and secondsegment='\'"/>
         </xsl:when>
         <xsl:when test="$secondsegmentarray.item = not('') and secondsegment='\'"/>
           <xsl:value-of select="concat($secondsegmentarray.item,secondsegment)"/>
         </xsl:when>
         <xsl:when test="$secondsegmentarray.item = not('') and secondsegment!='\'"/>
           <xsl:value-of select="concat($secondsegmentarray.item,'*',secondsegment)"/>
         </xsl:when>
         <xsl:when test="$secondsegmentarray.item = '' and secondsegment!='\'"/>
           <xsl:value-of select="concat('*',secondsegment)"/>
         </xsl:when>
        </xsl:choose>
    </xsl:for-each>
<xsl:variable/>

1 个答案:

答案 0 :(得分:1)

并不是真正的答案,但是太长而无法放入评论中。您会遇到很多语法问题,始于:

<xsl:for-each select="secondsegmentarray/item">

这是:

  • 缺少$字符来标识变量,并且:
  • 尝试处理结果树片段,而不将其转换为 首先是 node-set

正确的语法为:

<xsl:for-each select="exsl:node-set($secondsegmentarray)/item">

声明之后:

xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl"

在标题中。

接下来,在xsl:for-each指令中,您将处于item的上下文中。这意味着与当前item相关的任何测试都需要引用当前节点,例如:

 <xsl:when test=". = ''">

您尝试使用$secondsegmentarray.item在XPath / XSLT中是没有意义的。

此外,您在变量本身的定义中引用了secondsegment变量(同样,没有必需的$前缀)。当然,这是行不通的。

可能还有更多,但这些都脱颖而出。