XML / XSL форматирование таблицы - PullRequest
2 голосов
/ 20 июля 2010

Допустим, у меня есть список из 500 имен в тегах XML.Я хочу отобразить этот список в таблице, используя XSLT.В таблице XSLT я хочу иметь максимум три строки;Мне все равно, сколько у меня столбцов - я планирую поместить таблицу в прокручиваемый div.Если мой список имен вырастет до 1000, я все еще хочу только три строки, но количество столбцов может увеличиться до необходимого размера.

Как я могу сделать это в XSLT?Что касается таблиц XSL, я знаком с xsl: for-each, но это все.

Формат примерно такой:

<ИМЯ> данные </ ИМЯ> <ИМЯ> данные </ ИМЯ> ... </ node2> </ node1>

Ответы [ 2 ]

1 голос
/ 20 июля 2010

Это преобразование :

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

 <xsl:param name="pnumRows" select="3"/>

 <xsl:variable name="vnumCells" select="count(/*/*/NAME)"/>
 <xsl:variable name="vcellsPerRow"
       select="ceiling($vnumCells div $pnumRows)"/>


 <xsl:template match="node2">
  <table>
    <xsl:apply-templates select="NAME[position() mod $vcellsPerRow = 1]"/>
  </table>
 </xsl:template>

 <xsl:template match="NAME">
  <tr>
    <xsl:apply-templates mode="copy" select=
    ". | following-sibling::*[not(position() >= $vcellsPerRow)]"/>
  </tr>
 </xsl:template>

 <xsl:template match="NAME" mode="copy">
  <td><xsl:value-of select="."/></td>
 </xsl:template>
</xsl:stylesheet>

при выполнении для любого XML-документа с указанным форматом, например, следующего :

<node1>
    <node2>
        <NAME>name1</NAME>
        <NAME>name2</NAME>
        <NAME>name3</NAME>
        <NAME>name4</NAME>
        <NAME>name5</NAME>
        <NAME>name6</NAME>
        <NAME>name7</NAME>
        <NAME>name8</NAME>
        <NAME>name9</NAME>
        <NAME>name10</NAME>
    </node2>
</node1>

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

    <table>
   <tr>
      <td>name1</td>
      <td>name2</td>
      <td>name3</td>
      <td>name4</td>
   </tr>
   <tr>
      <td>name5</td>
      <td>name6</td>
      <td>name7</td>
      <td>name8</td>
   </tr>
   <tr>
      <td>name9</td>
      <td>name10</td>
   </tr>
</table>
0 голосов
/ 20 июля 2010

Если вы говорите о преобразовании XML в таблицу HTML с помощью XSLT, я бы рекомендовал взглянуть на эту статью .Он предоставляет несколько шаблонов, которые позволят вам делать то, о чем вы говорите, но это, вероятно, потребует небольшой доработки.

...