2017-12-22 19 views
1

Iは、以下の変数を持っている:XSL:各値の間にカンマで連結変数の表示結果

<?xml version="1.0" encoding="UTF-8"?> 


<!DOCTYPE stylesheet [ 
<!ENTITY menu SYSTEM "verb.xml"> 
]> 

<xsl:variable name="per"> 
    <xsl:value-of select="*//per/@value | *//gen/@value | *//number/@value"/> 
</xsl:variable> 

<xsl:for-each select="concat($per, '')" > 
    <xsl:value-of select="translate(., ' ', '')" separator="," /> 
</xsl:for-each> 

TEI-XMLコンテンツ:

<gramGrp n="1.1" ana="#actor-affixes"> 
    <per ana="#s2" value="2"/> 
    <gen ana="#smasc" value="m"/> 
    <number ana="#ssing" value="sg"/> 
</gramGrp> 
<gramGrp n="1.2" ana="#actor-affixes"> 
    <per ana="#s3" value="3"/> 
    <gen ana="#sfem" value="f"/> 
    <number ana="#ssing" value="sg"/> 
</gramGrp> 
<!-- gramGrp --> 

出力が現在ある:2msg3fsg

でも必要:2msg、3fsg

私はいくつかのソリューション、例えば、variaそれぞれ elementまたは<xsl:if test="position() != last()"><xsl:value-of select="translate(., ' ', '')" /><xsl:text>, </xsl:text></xsl:if>の1つの変数の代わりに、それぞれelementの場合は1つだけです。しかし、それは動作しません...

事前に、あなたの親切なアドバイスありがとうございます。

答えて

1

は、連結された値または文字列に参加している値の文字列の配列である変数を使用:

<xsl:variable name="values" as="xs:string*" select="//gramGrp/string-join((per/@value, gen/@value, number/@value), '')"/> 
<xsl:value-of select="$values" separator=", "/> 

http://xsltfiddle.liberty-development.net/eiQZDbbを参照してください。

+0

優秀!本当にありがとう。前に他の 'element'があるので、'/'gramGrp'の前に' * 'を追加しました。それは良い作品です!私は 'xsl'の初心者なので、' xs:string'に慣れていません。 – Vanessa

関連する問題