Splitfunction дает проблемы

Я столкнулся со следующей проблемой или вызовом. У меня есть элемент в моем исходном 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>

Эта структура всегда приводит к полной строке. В отладке я вижу, что он разделил его, но он объединяет результат вместе. Можно ли как-то выйти из функции?

С наилучшими пожеланиями Дирк Полезно Бесполезно


person Dirk    schedule 15.05.2013    source источник


Ответы (1)


Пожалуйста, взгляните на этот XSLT, где вам нужно установить <xsl:param name="stringRequired" select="xs:integer(13)"/> для фрагмента текста:

    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xsl:output method="xml" omit-xml-declaration="yes" indent="yes" encoding="utf-8"/>

  <xsl:param name="XML">
    <info>abcdefghijklmnopqrstuvwxyz01234567890abcdefghijklmnopqrstuvwxyz01234567890</info>
  </xsl:param>
  <xsl:param name="stringRequired" select="xs:integer(13)"/>
  <xsl:param name="XMLLenfgh" select="string-length($XML)"/>
  <xsl:template match="/">
    <xsl:choose>
      <xsl:when test="$XMLLenfgh gt $stringRequired">
        <xsl:call-template name="getPart"/>
      </xsl:when>
      <xsl:otherwise>
        <T31>
          <x>
            <xsl:value-of select="$XML/info"/>
          </x>
        </T31>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <xsl:template name="getPart">
    <xsl:param name="XML" select="$XML"/>
    <xsl:param name="stringRequired" select="$stringRequired"/>
    <xsl:param name="XMLLenfgh" select="$XMLLenfgh"/>
    <xsl:message>
      <xsl:value-of select="$XML"/>
    </xsl:message>
    <xsl:if test="$XMLLenfgh gt $stringRequired">
      <T>
        <x>
          <xsl:value-of select="substring($XML,1,$stringRequired)"/>
        </x>
      </T>
      <xsl:call-template name="getPart">
        <xsl:with-param name="XML"
          select="substring($XML,string-length(substring($XML,1,$stringRequired)))"/>
        <xsl:with-param name="XMLLenfgh"
          select="string-length(substring($XML,string-length(substring($XML,1,$stringRequired))))"/>
        <xsl:with-param name="stringRequired" select="$stringRequired"/>
      </xsl:call-template>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>

ВЫВОД:

<T xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <x>abcdefghijklm</x>
</T>
<T xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <x>mnopqrstuvwxy</x>
</T>
<T xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <x>yz01234567890</x>
</T>
<T xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <x>0abcdefghijkl</x>
</T>
<T xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <x>lmnopqrstuvwx</x>
</T>
<T xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <x>xyz0123456789</x>
</T>
person Navin Rawat    schedule 15.05.2013