2017-12-22 7 views
1

Ich habe die folgende Variable:xsl: Anzeige Ergebnis concat Variable mit Komma zwischen dem Wert

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

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

Der Ausgang ist zur Zeit: 2msg3fsg

Aber ich wollen: 2msg, 3fsg

Ich versuchte mehrere Lösungen, zum Beispiel eine Varia ble für jede element, anstelle einer Variablen für alle TEIelement oder <xsl:if test="position() != last()"><xsl:value-of select="translate(., ' ', '')" /><xsl:text>, </xsl:text></xsl:if>. Aber es funktioniert nicht ...

Im Voraus, vielen Dank für Ihre freundliche Beratung.

Antwort

1

eine Variable verwenden, die aus einer Folge von Zeichenfolgen der verketteten Werte oder String-Werte verbunden ist:

<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 anzeigen.

+0

Ausgezeichnet! Vielen Dank. Da ich vorher ein anderes 'Element 'habe, habe ich' * 'vor' // gramGrp' hinzugefügt. Es funktioniert gut! Ich bin nicht an 'xs: string' gewöhnt, da ich ein Neuling in' xsl' bin. – Vanessa