Если допустить, что строка заголовка заканчивается двоеточием и в каждой строке данных есть 7 значений *, то можно использовать следующую таблицу стилей:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="/rest-adapter-response">
<xsl:variable name="csv" select="message-body/non-xml-data-response" />
<!-- header -->
<xsl:value-of select="substring-before($csv, ':')" />
<xsl:text>: </xsl:text>
<!-- data -->
<xsl:call-template name="restore-csv">
<xsl:with-param name="text" select="substring-after($csv, ':')"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="restore-csv">
<xsl:param name="text"/>
<xsl:param name="i" select="1"/>
<xsl:choose>
<xsl:when test="contains($text, ',')">
<xsl:variable name="value">
<xsl:choose>
<xsl:when test="starts-with($text, '"')">
<xsl:text>"</xsl:text>
<xsl:value-of select="substring-before(substring-after($text, '"'), '"')"/>
<xsl:text>"</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="substring-before($text, ',')"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- output -->
<xsl:value-of select="$value"/>
<xsl:choose>
<xsl:when test="$i mod 7 = 0">
<xsl:text> </xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>,</xsl:text>
</xsl:otherwise>
</xsl:choose>
<!-- recursive call -->
<xsl:call-template name="restore-csv">
<xsl:with-param name="text">
<xsl:choose>
<xsl:when test="starts-with($text, '"')">
<xsl:value-of select="substring-after(substring-after($text, '"'), '",')"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="substring-after($text, ',')"/>
</xsl:otherwise>
</xsl:choose>
</xsl:with-param>
<xsl:with-param name="i" select="$i + 1"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Применительно к вашему примеру ввода результат будет:
Результат
COA,COA Acct Desc,Acct Prefix,Revaluation Acct,Mapping Changes - Additions( A ) Deletions ( D ) Changes ( C ),MJE,OIM Recon,Comments for difference:
10000274,"Citibank, Operating, USD, 31165975",1000,10009999,A,,X
10000374,"Citibank, Clearing, USD, 31165975",1000,10009999,A,,X
10006604,"HSBC, Operating, SAR, SA0345000000003179660002",1000,10009999,A,,X
10006605,"Citibank, Operating, ZAR, 0202099009",1000,10009999,A,,X
123,,,456,,,
Это может потребоватьсябольше работы для обработки возможных экранированных двойных кавычек в кавычках.
-
(*) Странно то, что в строке заголовка есть 8 значений, но только 7 встроки данных.