在xslt中循环并连接数组

问题描述 投票:0回答:1

我试图循环一个数组并将非空值连接到一个变量。不用说我是XSLT的新手。请查看我编写的代码,并告诉我最好的方法。

\将被添加到最后,我还必须在值之间添加分隔符*。如果*和\在一起,那么只有\应该来,我们可以省略*。我相信逻辑是正确的。语法是问题。

谢谢,Anoop

<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/>
xml xslt xslt-1.0
1个回答
1
投票

不是一个真正的答案,但太长,不适合评论。您有许多语法问题,从以下开始:

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

这是:

  • 缺少$字符来识别变量,并且:
  • 尝试处理结果树片段而不先将其转换为节点集。

正确的语法是:

<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=". = ''">

在XPath / XSLT中,您尝试使用$secondsegmentarray.item毫无意义。

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

可能会有更多,但这些突出。

© www.soinside.com 2019 - 2024. All rights reserved.