Я не уверен в ваших точных требованиях, но вы можете использовать рекурсивный шаблон для разбиения вашего входного текста на PID05 элементов, каждый из которых содержит 40 символов.
Например,рассмотрим этот элемент
<text>The quick brown fox jumps over the lazy dog</text>
Затем, используя следующий XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:param name="splitLength" select="10"/>
<!-- Pad out a string with excess characters -->
<xsl:template name="pad">
<xsl:param name="padChar" />
<xsl:param name="count" select="$splitLength" />
<xsl:value-of select="$padChar" />
<xsl:if test="$count > 1">
<xsl:call-template name="pad">
<xsl:with-param name="padChar" select="$padChar" />
<xsl:with-param name="count" select="$count - 1" />
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template match="/text">
<xsl:call-template name="splitter">
<xsl:with-param name="text" select="text()"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="splitter">
<xsl:param name="text"/>
<PID>
<PID01>F</PID01>
<PID05>
<xsl:value-of select="substring($text, 1, $splitLength)"/>
<xsl:if test="string-length($text) < $splitLength">
<xsl:call-template name="pad">
<xsl:with-param name="padChar" select="' '" />
<xsl:with-param name="count" select="$splitLength - string-length($text)" />
</xsl:call-template>
</xsl:if>
</PID05>
</PID>
<xsl:if test="string-length($text) > $splitLength">
<xsl:call-template name="splitter">
<xsl:with-param name="text" select="substring($text, $splitLength + 1, string-length($text))"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Затем выдается следующее:
<PID>
<PID01>F</PID01>
<PID05>The quick </PID05>
</PID>
<PID>
<PID01>F</PID01>
<PID05>brown fox </PID05>
</PID>
<PID>
<PID01>F</PID01>
<PID05>jumps over</PID05>
</PID>
<PID>
<PID01>F</PID01>
<PID05> the lazy </PID05>
</PID>
<PID>
<PID01>F</PID01>
<PID05>dog </PID05>
</PID>
Примечание. Здесь я параметризовал длину разделенияи установите его на 10, а не 40, просто в качестве примера.
Не существует также именованного шаблона, который дополняет точную длину последнего элемента PID05 (в нашем случае 10).