Поместите контент XML в четыре блока HTML - PullRequest
0 голосов
/ 20 октября 2011

У меня есть несколько тегов XML, которые я хочу разместить в четырех блоках (делениях).

Входные данные следующие:

<product>
  <product1>1</product1>
  <product2>2</product2>
  <product3>3</product3>
  <product4>4</product4>
  <product5>5</product5>
  <product6>6</product6>
  <product7>7</product7>
  <product8>8</product8>
</product>

Выходные данные, которые я пытаюсь получить::

<div><span>1</span> <span>5</span></div>
<div><span>2</span> <span>6</span></div>
<div><span>3</span> <span>7</span></div>
<div><span>4</span> <span>8</span></div>

Вот ссылка на картинку того, что я пытаюсь получить http://clip2net.com/s/1fON5

Таблицы здесь не будут хорошими, так как мне нужны четыре независимых блока.

Любая помощь приветствуется!

1 Ответ

2 голосов
/ 20 октября 2011

Предполагая, что вы определяете параметр с именем blocks , первый элемент в каждом блоке будет сопоставляться простым выполнением следующего:

<xsl:apply-templates select="product/*[position() &lt;= $blocks]" />

В шаблоне, который соответствует такому элементуЗатем вам нужно выбрать сам элемент, а затем все последующие элементы для блока (который будет зависеть от количества блоков), например, так:

<xsl:apply-templates
   select="self::*|following-sibling::*[position() mod $blocks = 0]"
   mode="block" />

Обратите внимание на режим здесь дляостановить рекурсивный вызов шаблона.В соответствующем шаблоне вы можете добавить свой код для тегов span в вашем случае.

Итак, с учетом следующего XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="html" indent="yes"/>
   <xsl:param name="blocks" select="4" />

   <xsl:template match="/">
      <xsl:apply-templates select="product/*[position() &lt;= $blocks]" />
   </xsl:template>

   <xsl:template match="product/*">
      <div>
      <xsl:apply-templates 
         select="self::*|following-sibling::*[position() mod $blocks = 0]" 
         mode="block" />
      </div>
   </xsl:template>

   <xsl:template match="*" mode="block">
      <span><xsl:value-of select="." /></span>
   </xsl:template>
</xsl:stylesheet>

Применительно кВ вашем примере XML выводится следующее:

<div><span>1</span><span>5</span></div>
<div><span>2</span><span>6</span></div>
<div><span>3</span><span>7</span></div>
<div><span>4</span><span>8</span></div>

Измените параметр на 3, и выведите следующее

<div><span>1</span><span>4</span><span>7</span></div>
<div><span>2</span><span>5</span><span>8</span></div>
<div><span>3</span><span>6</span></div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...