<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)"/>
我想问一下,只有当第二个以尽可能最短的方式存在时,我才能使逗号分隔符出现。提前致谢
答案 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()<3]">
<xsl:value-of select="handlingInstructionText"/>
<xsl:if test="position()!=last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:for-each>
请注意那里的<
。这实际上是一个小于符号(&lt;),但是我们不能在xml中使用它,所以我们使用为它定义的实体。
答案 1 :(得分:1)
如果您不想使用<%= form_for @advertisement, url: advertisement_path do |f| %>
,请尝试:
xsl:for-each
答案 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=","/>
产生相同的结果。