この短くて単純な(明示的な条件付き命令なし)XSLT 1.0変換:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/*">
<fields>
<field name="all">
<xsl:variable name="vfieldConcat">
<xsl:for-each select="field/value">
<xsl:value-of select="concat(., ' ')"/>
</xsl:for-each>
</xsl:variable>
<value><xsl:value-of select=
"normalize-space($vfieldConcat)"/></value>
</field>
</fields>
</xsl:template>
</xsl:stylesheet>
提供されたXMLドキュメントに適用した場合(整形式に修正):
<fields>
<field name="first">
<value>example</value>
</field>
<field name="last">
<value>hello</value>
</field>
<field name="age">
<value>25</value>
</field>
<field name="enable">
<value>1</value>
</field>
</fields>
必要な正しい結果を生成します。
<fields>
<field name="all">
<value>example hello 25 1</value>
</field>
</fields>
II。XSLT2.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="/*">
<fields>
<field name="all">
<value><xsl:value-of select="field/value"/></value>
</field>
</fields>
</xsl:template>
</xsl:stylesheet>
この変換が同じXMLドキュメント(上記)に適用されると、同じ正しい結果が生成されます。
<fields>
<field name="all">
<value>example hello 25 1</value>
</field>
</fields>
説明:のseparator
属性のxsl:value-of
デフォルト値が単一のスペースであるという事実を使用しています。