#xml #xslt #xpath
#xml #xslt #xpath
Вопрос:
Я использую XSLT для создания HTML-таблицы с использованием информации из XML-файла. Я хочу только 4 TD в каждом TR.
Он отлично работает в Chrome и Safari. Не в Firefox. Я понимаю, что Firefox не поддерживает ‘disable-output-escape’, поэтому я знаю, что это проблема (она просто записывается на веб-странице). Есть ли другой способ сгенерировать такую (простую) таблицу с помощью XSLT на стороне клиента?
Мой код выглядит так:
<table>
<xsl:for-each select="movies/movie">
<xsl:if test="(position() = 1) or ((position() mod 4) = 1)">
<!-- This is a <tr> -->
<xsl:text disable-output-escaping="yes">amp;<tramp;></xsl:text>
</xsl:if>
<td>
<!-- Some stuff goes here. -->
</td>
<xsl:if test="((position() mod 4) = 0) or (position() = last())">
<!-- This is a </tr> -->
<xsl:text disable-output-escaping="yes">amp;</tramp;></xsl:text>
</xsl:if>
</xsl:for-each>
</table>
Комментарии:
1. Можете ли вы опубликовать образец XML, который вы преобразуете?
Ответ №1:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<table>
<xsl:apply-templates select="movies/movie[position() mod 4 = 1]"/>
</table>
</xsl:template>
<xsl:template match="movie">
<tr>
<xsl:for-each select=". | following-sibling::movie[position() amp;< 4]">
<td>
<xsl:value-of select="."/>
</td>
</xsl:for-each>
</tr>
</xsl:template>
</xsl:stylesheet>
Введите XML:
<movies>
<movie>a</movie>
<movie>b</movie>
<movie>c</movie>
<movie>d</movie>
<movie>e</movie>
<movie>f</movie>
<movie>g</movie>
<movie>h</movie>
</movies>
Вывод XML:
<table>
<tr>
<td>a</td>
<td>b</td>
<td>c</td>
<td>d</td>
</tr>
<tr>
<td>e</td>
<td>f</td>
<td>g</td>
<td>h</td>
</tr>
</table>
Комментарии:
1. Спасибо! Это должен быть способ XSLT 🙂
Ответ №2:
Вы пробовали что-то подобное?
<table>
<tr><xsl:apply-templates select='movies/movie' /></tr>
</table>
А затем в другом шаблоне
<xsl:template match='movie'>
<td><xsl:value-of select='.' /></td>
</xsl>
Помните, что вы должны попытаться думать о XSLT как о системе шаблонов, а не как о языке программирования. Использование специфичных для XSLT конструкций обычно проще, чем пытаться перевести другие конструкции.