2009-06-18 10 views
3

基本的には、ループからコンマで区切られた文字列が作成されています。 A、B、C、 最後のカンマを取り除きたい。サブストリング、xsltの文字列長関数

<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)"/> 

最後の行には、最後に "、"を付けずにA、B、Cが表示されます。誰かが間違っていることを教えてもらえますか?

答えて

7

あなたはXMLをフォーマットした方法のために空白を出力しています。 2つの方法で修正できます。これは同じくらいカンマを扱ってやっている何

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

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

他、より堅牢な方法は、あなたが空白処理している方法を変更することです:一つは、ただの書式を削除することです出力の一部としてfor-eachループ内のすべての空白を処理するのではなく、周囲の空白を無視するようにします。参考のため

、私は、次のXMLファイルに対して上記のXSLTのスニペットを実行しました:

<root> 
    <valueinElement attributeValue="dogs"/> 
    <valueinElement attributeValue="cats"/> 
    <valueinElement attributeValue="mice"/> 
    <valueinElement attributeValue="lasers"/> 
    <valueinElement attributeValue="frogs"/> 
</root> 

そして、いずれの場合も、次の出力を得た:

dogs,cats,mice,lasers,frogs 
+0

素晴らしいと

<xsl:value-of select="substring($myConcatString,1,$valueLength)"/> 

、uが私に時間を保存! – chugh97

+0

@Welbog:カエルの後に最後のコンマを得られませんでしたか?私はときどき自分のXSLでTidyを実行するので、出力を変更するためにXSLのフォーマットをしたくないので、concat(@attributeValue、 '、')を使用してこれを行います。 –

3

ただ、これは交換してください使用、それが修正されますあなたの出力。

<xsl:value-of select="substring($myConcatString,0,$valueLength)"/> 
関連する問題