xsl:显示每个值之间用逗号表示的concat变量的结果

时间:2017-12-22 19:58:57

标签: xml xslt tei

我有以下变量:

<?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

我尝试了多种解决方案,例如,每个element的变量,而不是所有TEI element<xsl:if test="position() != last()"><xsl:value-of select="translate(., ' ', '')" /><xsl:text>, </xsl:text></xsl:if>的一个变量。但它不起作用......

提前,谢谢您的善意建议。

1 个答案:

答案 0 :(得分: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