Создайте простую таблицу HTML с XSLT - PullRequest
2 голосов
/ 26 октября 2011

Я использую XSLT для генерации HTML-таблицы, используя информацию из XML-файла.Я хочу только 4 TD в каждом TR.

Отлично работает на Chrome и Safari.Не в Firefox.Я понимаю, что Firefox не поддерживает «отключение-вывод-экранирование», поэтому я знаю, что это проблема (он просто пишет на веб-странице).Есть ли другой способ создать такую ​​(простую) таблицу с помощью 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">&lt;tr&gt;</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">&lt;/tr&gt;</xsl:text>
   </xsl:if> 
</xsl:for-each>
</table>

Ответы [ 2 ]

2 голосов
/ 26 октября 2011
<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() &lt; 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 голос
/ 26 октября 2011

Вы пробовали что-то подобное?

<table>
<tr><xsl:apply-templates select='movies/movie' /></tr>
</table>

И затем, в другом шаблоне

<xsl:template match='movie'>
   <td><xsl:value-of select='.' /></td>
</xsl>

Помните, что вы должны думать о XSLT как о системе шаблонов, более чемкак язык программирования.Использование XSLT-специфичных конструкций обычно проще, чем пытаться перевести другие конструкции.

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