Решение 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:strip-space elements="*"/>
<xsl:template match="Parent">
<Parent title="{string-join(Child, ', ')}"/>
</xsl:template>
</xsl:stylesheet>
Когда это преобразование применяется к предоставленному документу XML :
<Parent>
<Child>Value1</Child>
<Child>Value2</Child>
<Child>Value3</Child>
</Parent>
желаемый, правильный результат получается :
<Parent title="Value1, Value2, Value3"/>
Или, если кто-то хочет переопределить правило идентификации для большей гибкости :
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Child[1]">
<xsl:attribute name="title" select="string-join(../Child, ', ')"/>
</xsl:template>
<xsl:template match="Child"/>
</xsl:stylesheet>
Когда это преобразование применяется к тому же XML-документу (см. Выше), тот же требуемый, правильный результат снова выдается :
<Parent title="Value1, Value2, Value3"/>