これは、「アイデンティティ変換」ベースの xslt-1.0 ソリューションです。
IDS の内容は、splitIDS への再帰呼び出しによって吐き出されます。Record/Type は、出力例に含まれていないため無視されます。
次のようなことを試してください:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*" />
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- ignore IDS in Record -->
<xsl:template match="Record/IDS" />
<!-- ignore Type in Record -->
<xsl:template match="Record/Type" />
<xsl:template match="Record">
<xsl:call-template name="splitIDS">
<xsl:with-param name="ids" select="IDS" />
</xsl:call-template>
</xsl:template>
<xsl:template name="splitIDS">
<xsl:param name="ids"/>
<xsl:choose>
<xsl:when test="contains($ids,',')">
<xsl:call-template name="splitIDS">
<xsl:with-param name="ids" select="substring-before($ids,',')"/>
</xsl:call-template>
<xsl:call-template name="splitIDS">
<xsl:with-param name="ids" select="substring-after($ids,' ')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:copy>
<xsl:apply-templates />
<ID>
<xsl:value-of select="$ids"/>
</ID>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="Records">
<xsl:copy>
<xsl:apply-templates select="Record" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
次の出力が生成されます。
<?xml version="1.0"?>
<Records>
<Record>
<Name>Test</Name>
<ID>Test-1</ID>
</Record>
<Record>
<Name>Test</Name>
<ID>Test-2</ID>
</Record>
<Record>
<Name>Test</Name>
<ID>Test-3</ID>
</Record>
<Record>
<Name>XML</Name>
<ID>Test-4</ID>
</Record>
<Record>
<Name>XML</Name>
<ID>Test-5</ID>
</Record>
</Records>