The problem I'm facing seems simple, but being a novice in everything XSL - I'm yet to find a proper solution. What I want to do is build a string by concatenating the results of a foreach element loop, that I can later on use as a value for an attribute of a HTML element.
Given:
<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
<cd>
<country>UK</country>
<company>CBS Records</company>
</cd>
<cd>
<country>USA</country>
<company>RCA</company>
</cd>
<cd>
<country>UK</country>
<company>Virgin records</company>
</cd>
</catalog>
Desired output: CBS;RCA;Virgin records
I need a valid portion of XSLT code that would perform this transformation in a way described above. I believe I need an xsl-variable that would hold the result of concatenating <company>
and a separator character ;
. How can this be done? Thank you.
I don't believe you can use XSL variables to concatenate, because once a variable value is set, it can't be changed. Instead, I think you want something like:
<xsl:for-each select="catalog/cd">
<xsl:choose>
<xsl:when test="position() = 1">
<xsl:value-of select="country"/>
</xsl:when>
<xsl:otherwise>
;<xsl:value-of select="country"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
Does that make sense to you?
Edit: Just realized I may have misread how you were intending to use the variable. The snippet I posted above can be wrapped in a variable element for later use, if that's what you meant:
<xsl:variable name="VariableName">
<xsl:for-each select="catalog/cd">
<xsl:choose>
<xsl:when test="position() = 1">
<xsl:value-of select="country"/>
</xsl:when>
<xsl:otherwise>
;<xsl:value-of select="country"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:variable>
If you can use XSLT 2.0 then either of the following would work:
Use the string-join()
function:
<xsl:variable name="companies" select="string-join(catalog/cd/company, ';')" />
Use @separator
with xsl:value-of
:
<xsl:variable name="companies" >
<xsl:value-of select="catalog/cd/company" separator=";" />
</xsl:variable>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With