Я столкнулся со следующей проблемой или вызовом. У меня есть элемент в моем исходном XML, который может иметь 450 символов. С помощью моего xslt я хочу преобразовать это в куски по 75 символов.
...
<T61>
<parentInfo>SomeInfo</parentInfo>
<T86>
<info>abcdefghijklmnopqrstuvwxyz01234567890abcdefghijklmnopqrstuvwxyz01234567890</info>
</T86>
</T61>
...
Вывод, который я генерирую, должен выглядеть примерно так:
<T31>
<x>abcdefghijklmnopqrstuvwxyz01234567890</x>
</T31>
<T31>
<x>abcdefghijklmnopqrstuvwxyz01234567890</x>
</T31>
В своем коде я использую шаблон для T61, который делает свою работу. Я думал создать еще один шаблон для T86 и вызвать его из шаблона T61, но, похоже, это не работает, потому что у меня есть полная строка. Я создал функцию, которая может разбивать строку на части по 75. Но результатом функции по-прежнему является полная строка.
Я использовал функцию из предыдущего поста:
<xsl:function name="my:splitItUp" as="xs:string">
<xsl:param name="input" as="xs:string"/>
<xsl:param name="chunk-size" as="xs:integer"/>
<xsl:value-of>
<xsl:for-each-group select="string-to-codepoints($input)" group-by="(position() -1) idiv $chunk-size">
<xsl:sequence select="codepoints-to-string(current-group())"/>
</xsl:for-each-group>
</xsl:value-of>
</xsl:function>
...
<xsl:template match="T86">
<xsl:for-each select="my:splitItUp(info, 75)">
<T31>
<communication>
<xsl:value-of select="." />
</communication>
</T31>
</xsl:for-each>
</xsl:template>
Эта структура всегда приводит к полной строке. В отладке я вижу, что он разделил его, но он объединяет результат вместе. Можно ли как-то выйти из функции?
С наилучшими пожеланиями Дирк Полезно Бесполезно