В XSLT можно использовать значение выражения xpath при вызове шаблона с использованием параметра - PullRequest
1 голос
/ 10 января 2010

Я выполняю преобразование xsl, и в нем я вызываю шаблон с параметром, используя следующий код

<xsl:call-template name="GenerateColumns">
     <xsl:with-param name="curRow" select="$curRow"/>
     <xsl:with-param name="curCol" select="$curCol + 1"/>
</xsl:call-template>

Вызывает функцию шаблона, которая выводит часть элемента таблицы в HTML. CurRow и curCol используются для определения того, какая строка и столбец находятся в таблице. Для gbl_maxCols установлено количество столбцов в HTML-таблице

<xsl:template name="GenerateColumns">
   <xsl:when test="$curCol &lt;= $gbl_maxCols">
       <td>
       <xsl:attribute="colspan">
           <xsl:value-of select="/page/column/@skipColumns"/>
       </xsl:attribute> 
   </xsl:when>
</xsl:template>

Результатом этой функции является набор элементов td, однако некоторые из этих элементов (элементы с атрибутом skipColumn больше 1 охватывают более 1 столбца, мне нужно пропустить это количество столбцов при следующем вызове generateColumns.

это работает так же, как и следовало ожидать в случае, когда я просто увеличиваю параметр curCol, но у меня есть случай, когда мне нужно использовать значение из атрибута xml skipColumns в математике для вычисления значения для curCol. В приведенном выше случае я перебираю все столбцы, и это работает для большинства моих вариантов использования. Однако в тех же случаях мне нужно пропустить некоторые столбцы и передать это значение из атрибута xml, чтобы вычислить, сколько столбцов мне нужно пропустить.

Моя наивная первая попытка была примерно такой

<xsl:call-template name="GenerateColumns">
     <xsl:with-param name="curRow" select="$curRow"/>
     <xsl:with-param name="curCol" select="$curCol + /page/column/@skipColumns"/>
</xsl:call-template>

Но, к сожалению, это не похоже на работу. Есть ли способ использовать атрибут со страницы XML в расчете для значения параметра в xsl.

Моя XML-страница выглядит примерно так (отредактировано, поскольку XML-файл довольно большой)

<page>
 <column name="blank" skipColumns="1"/>
 <column name="blank" skipColumns="1"/>
 <column name="test" skipColumns="3"/>
 <column name="blank" skipColumns="1"/>
 <column name="test2" skipColumns="6"/>
</page>

после всего этого я хотел бы иметь набор элементов td, подобных следующему

<td></td><td></td><td colSpan="3"></td><td></td><td colSpan="6"></td>

если я просто перебираю столбцы, я получаю что-то вроде этого, которое дает мне больше элементов td, чем у меня должно быть

<td></td><td></td><td colSpan="3"></td><td></td><td colSpan="6"></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td>

Отредактировано для предоставления дополнительной информации

Ответы [ 2 ]

0 голосов
/ 11 января 2010

Насколько я понимаю, вы хотите добавить номер текущего столбца к значению в атрибуте @ skipColumns.

Предполагая, что контекстный узел является элементом 'column':

<xsl:call-template name="GenerateColumns">
 <xsl:with-param name="curRow" select="$curRow"/>
 <xsl:with-param name="curCol" select="number($curCol) + number(@skipColumns)"/>
</xsl:call-template>
0 голосов
/ 10 января 2010

Я до сих пор не уверен, что вы пытаетесь сделать, но я вижу проблему с созданием значения $ curCol.

Ваше задание выглядит так

<xsl:with-param name="curCol" select="$curCol + **/page/column/@skipColumns**"/>

Выбор добавляет значение $ curCol к последовательности атрибутов @skipColumns. Это не разрешено Вы можете выбрать определенный атрибут и добавить к нему значение, например

<xsl:with-param name="curCol" select="$curCol + /page/column**[1]**/@skipColumns"/>

или, с параметром

<xsl:with-param name="curCol" select="$curCol + /page/column**[$index]**/@skipColumns"/>

и тогда вы получите желаемое значение.

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