Как отобразить XML в виде таблицы HTML - PullRequest
3 голосов
/ 16 августа 2011

У меня есть XML-файл, который содержит информацию о конфигурации для некоторых программ. Файл выглядит примерно так:

<master>
  <childCat1>
     <param1>test1</param1>
     <param2>test2</param2>
   </childCat1>
  <childCat2>
     <item1>test3</item1>
     <item2>test4</item2>
  </childCat2>
</master>*

Я хочу создать таблицу стилей XSL для отображения XML в виде таблицы html. Может кто-нибудь предложить, как я мог бы использовать XSL для преобразования XML в таблицу, как показано ниже? Мне нужно иметь возможность добавлять дополнительные категории и параметры без необходимости каждый раз пересматривать таблицу стилей - было бы здорово, если бы таблица стилей понимала, что xml всегда будет иметь категории, параметры и значения, но не делала никаких предположений о том, сколько из них.

В таблице я бы хотел 3 столбца. Я бы хотел, чтобы столбцы отображались как:

Category    Parameter   Value
--------------------------------
childCat1   param1      test1
childCat1   param2      test2
-------------------------------- 
childcat2   item1       item1
childcat2   item2       item2

и т.д. Было бы неплохо иметь разделительные линии между категориями, но я могу жить без них.

Заранее спасибо за любую помощь. Если ничего не поможет, я напишу некоторый php-код для этого, но таблица стилей XSL будет гораздо более универсальной.

РАЗЪЯСНЕНИЯ:

Я предпочитаю XSL, который заранее знает только одну вещь: у XML есть два уровня элементов: категории и их непосредственные потомки. Поэтому независимо от того, что я могу добавить (или удалить) - дополнительные категории или дочерние элементы или что-то еще, xsl работает без обновления вручную.

1 Ответ

0 голосов
/ 04 января 2016

Я думаю, это то, что вы ищете

<?xml version="1.0" encoding="ISO-8859-1"?>
 <xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/master">
 <html><body>
 <table border="1">
  <tr bgcolor="yellow">
        <th style="text-align:left">Category</th>
        <th style="text-align:left">Parameter</th>
        <th style="text-align:left">Value</th>
      </tr>
   <xsl:apply-templates select="./*" mode='category' />

 </table>
</body></html>
 </xsl:template>

<xsl:template match='*' mode='category'>
<tr><td colspan='3'></td></tr>
<xsl:apply-templates select="./*" mode='parameter' />
</xsl:template>

<xsl:template match='*' mode='parameter'>
<tr>
<td><xsl:value-of select="name(..)"/></td>
<td><xsl:value-of select="name()"/></td>
<td><xsl:value-of select="."/></td>
</tr>

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