仅存在第二个值时显示分隔符

时间:2016-01-11 07:23:33

标签: xslt

<handlingInstruction>
    <handlingInstructionText>CTAC  |  MARTINE HOEYLAERTS</handlingInstructionText>
</handlingInstruction>
<handlingInstruction>
    <handlingInstructionText>PHON  |  02/7225235</handlingInstructionText>
</handlingInstruction>

我有上面给出的xml结构我连接它们并使用逗号作为分隔符使用下面的代码

> <xsl:value-of
> select="concat(handlingInstruction[1]/handlingInstructionText,
>                              ',',
>                              handlingInstruction[2]/handlingInstructionText)"/>

我想问一下,只有当第二个以尽可能最短的方式存在时,我才能使逗号分隔符出现。提前致谢

3 个答案:

答案 0 :(得分:1)

<xsl:for-each select="handlingInstruction">
    <xsl:value-of select="handlingInstructionText"/>
    <xsl:if test="position()!=last()">
        <xsl:text>,</xsl:text>
    </xsl:if>
</xsl:for-each>

这将迭代所有handlingInstruction元素并输出handlingInstructionText元素的值。它将添加到每个元素的末尾,如果它不是最后一个元素(如果只有一个元素,那么它将是第一个元素),一个逗号。

在您的示例中,您只使用了两个handlingInstruction元素。如果您只想使用此方法使用两个,请执行

<xsl:for-each select="handlingInstruction[position()&lt;3]">
    <xsl:value-of select="handlingInstructionText"/>
    <xsl:if test="position()!=last()">
        <xsl:text>,</xsl:text>
    </xsl:if>
</xsl:for-each>

请注意那里的&lt;。这实际上是一个小于符号(&lt;),但是我们不能在xml中使用它,所以我们使用为它定义的实体。

答案 1 :(得分:1)

如果您不想使用<%= form_for @advertisement, url: advertisement_path do |f| %> ,请尝试:

xsl:for-each

(从此处继续:https://stackoverflow.com/a/34679465/3016153

答案 2 :(得分:0)

这是第二种方法,它避免了for-each循环。

如果您使用的是xslt版本2,则可以使用字符串连接函数,如:

<xsl:value-of select="string-join(//handlingInstruction/handlingInstructionText,',')"/>

string-join方法接受一系列字符串(选择的节点将通过获取其内容转换为它们)并将它们与分隔符连接起来。如果只有一个字符串,则不会添加分隔符。

或者,xslt 2还在value-of元素上提供separator属性。因此

<xsl:value-of select="//handlingInstruction/handlingInstructionText" separator=","/>

产生相同的结果。