xslt中的子串,字符串长度函数

chu*_*h97 3 xslt

基本上我有一个由逗号分隔的循环创建的字符串,例如.A,B,C,我想摆脱最后一个逗号.

<xsl:variable name="myConcatString">
   <xsl:for-each select="valueinElement">
        <xsl:value-of select="@attributeValue"/>,
   </xsl:for-each>
</xsl:variable>


<xsl:variable name="valueLength" select="string-length($myConcatString)-1"/>
<xsl:value-of select="substring($myConcatString,1,$valueLength)"/>
Run Code Online (Sandbox Code Playgroud)

现在最后一行应该给我A,B,C而不是最后的",".谁能告诉我出了什么问题?

Wel*_*bog 7

由于格式化XML的方式,您输出的是空格.您可以通过两种方式修复它.一种是删除格式:

<xsl:for-each select="valueinElement"><xsl:value-of select="@attributeValue"/>,</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)

另一种更强大的方法是改变你处理空格的方式:

<xsl:for-each select="valueinElement">
  <xsl:value-of select="@attributeValue"/>
  <xsl:text>,</xsl:text>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)

这样做只是将逗号视为一个元素,以便它忽略周围的空格,而不是将for-each循环内的所有空格视为输出的一部分.

作为参考,我针对以下XML文件运行了上述XSLT片段:

<root>
  <valueinElement attributeValue="dogs"/>
  <valueinElement attributeValue="cats"/>
  <valueinElement attributeValue="mice"/>
  <valueinElement attributeValue="lasers"/>
  <valueinElement attributeValue="frogs"/>
</root>
Run Code Online (Sandbox Code Playgroud)

并在两种情况下获得以下输出:

dogs,cats,mice,lasers,frogs
Run Code Online (Sandbox Code Playgroud)