xslt - добавление </tr><tr> каждого n узла? - PullRequest
3 голосов
/ 25 октября 2010

Я нашел элегантное решение этой проблемы здесь: xsl для каждого: добавить блок кода каждые n строк?

Я хотел бы понять код xslt, и мне было интересноЕсли бы вы могли помочь мне понять это, взглянув на приведенную выше ссылку.

В основном 3 <xsl:template>.Для меня первых двух достаточно для достижения цели.Однако я пробовал только с 2 <xsl:template>, и это не работает.Короче третий требуется.Вот оно:

<xsl:template match="gallery[not(position() mod 6 = 1)]"/>

Второй шаблон имеет режим, а последний - нет.

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

Спасибо за вашу помощь.

С уважением,

Роланд

Ответы [ 2 ]

3 голосов
/ 25 октября 2010

Вот полный код, о котором вы спрашивали. Я оказался автором, поэтому позвольте мне объяснить:

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

Следующий шаблон переопределяет встроенный шаблон XSLT для узлов элементов. Он соответствует каждому 6k + 1-му gallery элементу. Он создает элемент tr и внутри его тела помещает результаты обработки этого элемента gallery вместе со следующими 5. Обработка выполняется в специальном режиме ("proc"), чтобы отличить его от стандартного анонимного режима, в котором встроенные шаблоны XSLT запущены и продолжают работать.

 <xsl:template match="gallery[position() mod 6 = 1]"> 
  <tr> 
   <xsl:apply-templates mode="proc" 
        select=".|following-sibling::gallery[not(position() > 5)]" 
   /> 
  </tr> 
 </xsl:template> 

Следующий шаблон вызывается в режиме «proc» для обработки каждого gallery элемента в группе из 6, которые должны находиться в одной строке.

<xsl:template match="gallery" mode="proc"> 
  <td> 
    <img src="{gallery-image-location}" alt="{gallery-image-alt}"/> 
  </td> 
 </xsl:template> 

Следующий шаблон переопределяет обработку по умолчанию встроенных шаблонов XSLT для всех элементов gallery, положение которых не относится к типу 6k + 1 (они не запускают новый 6-кортеж). В нем просто сказано ничего не делать с такими элементами, потому что эти элементы уже обрабатываются в режиме «proc».

 <xsl:template match="gallery[not(position() mod 6 = 1)]"/> 
</xsl:stylesheet> 

Вам необходимо ознакомиться с моделью обработки XSLT, обработкой по умолчанию и встроенными шаблонами.

1 голос
/ 25 октября 2010

Первый шаблон соответствует позициям 1 и 7, второй шаблон вызывается из первого шаблона, чтобы вывести всех братьев и сестер. Последний шаблон соответствует позициям 2, 3, 4, 5, 6, 8, 8 и 9, так что с этими позициями происходит повторение ... как шаблон бездействия.

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