Как преобразовать XML с записями пар ключ-значение в таблицу HTML? - PullRequest
1 голос
/ 16 февраля 2012

У меня есть несколько сущностей (<data> в моем примере) с парами ключ-значение. Каждая сущность содержит одинаковые ключи в одинаковом порядке, но я не знаю, какие и сколько. Как преобразовать это в таблицу HTML, используя XSLT, имея ключи в заголовках таблицы и значения сущностей в строках таблицы?

<data>
  <entry>
     <key>id</key><value>12345</value>
  </entry>
  <entry>
     <key>price</key><value>12.45</value>
  </entry>
  <entry>
      <key>country</key><value>UK</value>
  </entry>
<data>
<data>
  <entry>
     <key>id</key><value>67890</value>
  </entry>
  <entry>
     <key>price</key><value>67.89</value>
  </entry>
  <entry>
      <key>country</key><value>DE</value>
  </entry>
<data>

... должно стать ...

<tr><th>id</th><th>price</th><th>country</th></tr>
<tr><td>12345</td><td>12.45</td><td>UK</td></tr>
<tr><td>67890</td><td>67.89</td><td>DE</td></tr>

1 Ответ

2 голосов
/ 16 февраля 2012

Использование:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/">
        <table>
            <tr>
                <xsl:for-each select="//data[1]/entry">
                    <th>
                        <xsl:value-of select="key"/>
                    </th>
                </xsl:for-each>
            </tr>

            <xsl:apply-templates select="//data"/>
        </table>
    </xsl:template>

    <xsl:template match="data">
        <tr>
            <xsl:apply-templates select="entry"/>
        </tr>
    </xsl:template>

    <xsl:template match="entry">
        <td>
            <xsl:value-of select="value"/>
        </td>
    </xsl:template>
</xsl:stylesheet>

Вывод:

<table>
  <tr>
    <th>id</th>
    <th>price</th>
    <th>country</th>
  </tr>
  <tr>
    <td>12345</td>
    <td>12.45</td>
    <td>UK</td>
  </tr>
  <tr>
    <td>67890</td>
    <td>67.89</td>
    <td>DE</td>
  </tr>
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...