XSLT: Как динамически проходить и вызывать шаблоны и элементы отображения? - PullRequest
0 голосов
/ 23 января 2012

У меня есть такой XML

<info>list1</info>
<count>24</count>
<rtag>1111</rtag>
<rtag>2222</rtag>   ------upto 24 rtags

Я хочу отобразить содержимое, как показано ниже

list1   1111 2222 3333 ----------upto 10 items{next line}
          1011 1022 1033-----------upto 10 times{next line}
          1001 1002 1003--till remaining items 

здесь, в этом случае, я получаю счет от бэкэнда. Я хочу отображать элементы, как показано выше, динамически, используя значение счетчика, вызывая template.can кто-нибудь, пожалуйста, помогите мне получить это?

1 Ответ

0 голосов
/ 23 января 2012
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" encoding="Windows-1252" />
  <xsl:strip-space elements="*" />

  <xsl:variable name="padding1" select="'        '" /><!-- first col -->
  <xsl:variable name="padding2" select="'      '" />  <!-- remaining cols -->
  <xsl:variable name="per-row"  select="10" />        <!-- column count -->

  <xsl:template match="list">
    <xsl:value-of select="info" />
    <xsl:value-of select="substring($padding1, string-length(info) + 1)" /> 
    <xsl:apply-templates select="rtag" />
  </xsl:template>

  <xsl:template match="rtag">
    <xsl:choose>
      <xsl:when test="position() mod $per-row = 1 and position() &gt; 1">
        <xsl:value-of select="$padding1" />
        <xsl:call-template name="padded-value" />
      </xsl:when>
      <xsl:otherwise>
        <xsl:call-template name="padded-value" />
        <xsl:if test="position() mod $per-row = 0 or position = last()">
          <xsl:value-of select="'&#10;'" />
        </xsl:if>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <xsl:template name="padded-value">
    <xsl:value-of select="substring($padding2, string-length() + 1)" /> 
    <xsl:value-of select="." />
  </xsl:template>
</xsl:stylesheet>

применяется к

<list>
  <info>list1</info>
  <count>24</count>
  <rtag>1111</rtag><rtag>1111</rtag><rtag>1111</rtag><rtag>1111</rtag><rtag>1111</rtag>
  <rtag>1111</rtag><rtag>1111</rtag><rtag>1111</rtag><rtag>1111</rtag><rtag>1111</rtag>
  <rtag>222</rtag><rtag>2222</rtag><rtag>2222</rtag><rtag>2222</rtag><rtag>2222</rtag>
  <rtag>2222</rtag><rtag>2222</rtag><rtag>2222</rtag><rtag>2222</rtag><rtag>2222</rtag>
  <rtag>333</rtag><rtag>3333</rtag><rtag>3333</rtag><rtag>3333</rtag>
</list>

производит

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