В зависимости от пространства значений для различных типов компонентов (например, если известно, что они не содержат пробелов), может подойти вам одно из этих простых решений XSLT 1.0.
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="value">
<xsl:value-of select=
"translate(., ' 	 ', ',')"/>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
Выдает
AE012345677890,Bankcode,countryname,countrycode
И это преобразование :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="value">
<xsl:value-of select=
"normalize-space(translate(., ' ', ','))"/>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
производит
AE012345677890, Bank code, country name, country code
Если ни одно из этих двух преобразований XSLT 1.0 не удовлетворяет вашим требованиям, вам может потребоваться выполнить операцию trim
. Существует trim
функция / шаблон в FXSL - готов к использованию.
II. Быстрое решение XSLT 2.0 :
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="value">
<xsl:variable name="vLines" select="tokenize(., '
?
')"/>
<xsl:for-each select="$vLines">
<xsl:value-of select=
"translate(replace(., '(^[ \t\r]+)|([ \t\r]+$)', '~~'), '~', '')"/>
<xsl:if test="not(position() eq last())">,</xsl:if>
</xsl:for-each>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
дает именно нужный результат :
AE012345677890,Bank code,country name,country code