2015-04-05 3 views
0

мне нужно следующее поведение в трансформации XSLT в DataPower:Как добавить верхние и нижние колонтитулы в текстовый вывод в XSLT-преобразовании?

ввод текста:

AAAAAZZZZZZZ 
BBBBBZZZZZZZ 
CCCCCZZZZZZZ 

Выходной текст:

_HEADER 
AAAAA 
BBBBB 
CCCCC 
_FOOTER 

Так что я написал следующее XSLT:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:dp="http://www.datapower.com/extensions" 
    xmlns:str="http://exslt.org/strings" 
    xmlns:date="http://exslt.org/dates-and-times" 
    extension-element-prefixes="dp str date" 
> 
    <dp:input-mapping href="store:///pkcs7-convert-input.ffd" type="ffd"/> 

    <xsl:output method="text"/> 

    <xsl:variable name="rowsep" select="'&#10;'"/> 
    <xsl:variable name="input64" select="dp:binary-encode(/object/message/node())"/> 
    <xsl:variable name="str" select="dp:decode($input64,'base-64')"/> 

    <xsl:template match="/"> 

    <!-- Header --> 

    <xsl:text>_HEADER&#10;</xsl:text> 

    <!-- Body --> 

     <xsl:for-each select="str:split($str,$rowsep)"> 
     <xsl:if test="position()!=last()"> 
      <xsl:value-of select="substring(.,1,5)"/> 
      <xsl:text>&#10;</xsl:text> 
     </xsl:if> 
     </xsl:for-each> 

     <!-- Trailer --> 

    <xsl:text>_FOOTER&#10;</xsl:text> 

</xsl:template> 
</xsl:stylesheet> 

Но он генерирует следующий результат:

_HEADER 
_HEAD 
AAAAA 
BBBBB 
CCCCC 
_FOOTER 

Я не понимаю, почему каждый текст или значение-тега вне для-каждый тег генерирует странные выходы (или, по крайней мере, я не смог найти образец того, что это не так). Как вы можете видеть, заголовок «частично» повторяется и не знает причины такого поведения.

Не могли бы вы рассказать мне, где будет ошибка?

+0

Ваша таблица стилей XSLT, как вы ее показываете, раскрывает это поведение? Если да, можете ли вы включить значение '$ str'? – Tomalak

+0

$ str is/object/message/node(), который представляет все содержимое ввода: brokermq

+1

Мне удалось запустить ваш код на DataPower vm и получить ожидаемые результаты. Лучше всего отлаживать, добавив строку 'xsl: value-of', которая выводит содержимое $ input64, а затем переходит к некоторому онлайн-конвертеру Base64 и видит, действительно ли вы правильно вводите входные данные (включая окончания строк). – bjimba

ответ

0

Решила! ... Это была моя ошибка ... Я был закрыт в идее, что XSLT не срабатывал. Но я дважды применял трансформацию: в MPG и в бэкэнде. Это объясняет странное поведение.

+0

Рад это услышать. В этом есть смысл. – bjimba