Как преобразовать XML в таблицу HTML, используя XSL для каждого - PullRequest
0 голосов
/ 26 августа 2009

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

<G>
  <OE>
    <example1>Sample 1</example1>
    <example2>Sample 2</example2>
    <var name="name1">
      <integer>1</integer>
    </var>
  </OE>
</G>

Я хочу получить все подробности и отобразить их в виде таблицы, поэтому я использую следующий код XSL:

<xsl:stylesheet 
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
  <xsl:template match="/">
    <html>
      <body>
        <h2>Heading</h2>
        <table border="1">
          <tr bgcolor="#3399FF">
            <th>Example 1</th>
            <th>Example 2</th>
            <th>Var name</th>
            <th>Int</th>
          </tr>
          <xsl:for-each select="G/OE">
            <xsl:for-each select="var">
              <tr>
                <td>
                  <xsl:value-of select="Example 1" />
                </td>
                <td>
                  <xsl:value-of select="Example 2" />
                </td>
                <td>
                  <xsl:value-of select="@name" />
                </td>
                <td>
                  <xsl:value-of select="integer" />
                </td>
              </tr>
            </xsl:for-each>
          </xsl:for-each>
        </table>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

Я знаю, что следующий XSL не будет работать должным образом. Я хочу вывод:

Образец 1, Образец 2, name1, 1 - в табличном формате.

Моя проблема в том, что я не знаю, как это сделать. В приведенном выше коде XSL он будет получать только var и integer. Если я использую только верхний <xsl:for-each>, то получаются только первые два.

Я пытался переместить 2-е <xsl:for-each> после первого, который был выбран, поэтому между:

<td><xsl:value-of select="Example 2"/></td>

и

<td><xsl:value-of select="@name"/></td>

Я получаю ошибку. Есть ли способ решить эту проблему?

Спасибо за помощь.

1 Ответ

0 голосов
/ 26 августа 2009

Вы зацикливаетесь (во внутреннем for-each) над var, поэтому оба примера тега находятся за пределами вашей области в этот момент. Вы можете удалить внутренний цикл for-each (и ссылаться на var / @ name и var / integer вместо @name и integer).

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