преобразовать символы в узел XML с помощью xslt - PullRequest
2 голосов
/ 10 января 2012
<xsl:variable name="string" select="'abcdefghijklmnopqrstuvwxyz'" />

Мне нужно преобразовать эту строку в узел, сгруппированный по 5 символам, очевидно, что последняя группа может быть меньше или равна 5 символам в зависимости от входной строки

<node>
  <a>abcde</a>
  <a>fghij</a>
  <a>klmno</a>
  <a>pqrst</a>
  <a>uvwxy</a>
  <a>z</a>
</node>

Ответы [ 2 ]

3 голосов
/ 10 января 2012

Это преобразование :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:param name="pStr" select="'abcdefghijklmnopqrstuvwxyz'" />
 <xsl:param name="pChunkSize" select="5"/>

 <xsl:template match="/*">
  <node>
    <xsl:call-template name="split"/>
  </node>
 </xsl:template>

 <xsl:template name="split">
  <xsl:param name="pStr" select="$pStr" />
  <xsl:param name="pChunkSize" select="$pChunkSize"/>

  <xsl:variable name="pRemLength" select="string-length($pStr)"/>

  <xsl:if test="$pRemLength">
   <a><xsl:value-of select="substring($pStr, 1, $pChunkSize)"/></a>

   <xsl:call-template name="split">
    <xsl:with-param name="pStr" select="substring($pStr, $pChunkSize+1)"/>
    <xsl:with-param name="pChunkSize" select="$pChunkSize"/>
   </xsl:call-template>
  </xsl:if>

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

при применении к любому документу XML (не используется), дает требуемый, правильный результат :

<node>
   <a>abcde</a>
   <a>fghij</a>
   <a>klmno</a>
   <a>pqrst</a>
   <a>uvwxy</a>
   <a>z</a>
</node>

Пояснение : Примитивная рекурсия без длины строки в качестве условия остановки, причем каждый шаг рекурсии производит следующий фрагмент и вырезает его из строки.

1 голос
/ 10 января 2012

вот аналогичный вопрос с ответом, который вы можете легко изменить, чтобы охватить ваш вопрос: http://www.jguru.com/faq/view.jsp?EID=1070072

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...