Преобразовать XML в HTML в табличном формате - PullRequest
0 голосов
/ 18 января 2011

Я хочу изменить это XML-содержимое на HTML-таблицу

    <SSI>
        <data>
            <expanded>Chemical Research</expanded><abbre>Chem. Res.</abbre>
            <expanded>Materials Journal</expanded><abbre>Mater. J.</abbre>
            <expanded>Chemical Biology</expanded><abbre>Chem. Biol.</abbre>
            <expanded>Symposium Series</expanded><abbre>Symp. Ser.</abbre>
            <expanded>Biochimica Polonica</expanded><abbre>Biochim. Pol.</abbre>
            <expanded>Chemica Scandinavica</expanded><abbre>Chem. Scand.</abbre>
        <\data>
        <data>
            <expanded>Botany</expanded><abbre>Bot.</abbre>
            <expanded>Chemical Engineering</expanded><abbre>Chem. Eng.</abbre>
            <expanded>Chemistry</expanded><abbre>Chem.</abbre>
            <expanded>Earth Sciences</expanded><abbre>Earth Sci.</abbre>
            <expanded>Microbiology</expanded><abbre>Microbiol.</abbre>
        <\data>
    <\SSI>

Пробовал со следующим XSL

      <?xml version="1.0"?>
      <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:template match="/">
      <html>
      <head><title>Abbreviate</title></head>
      <body>
      <table border="1">
      <tr>
      <th>Expanded</th>
      <th>Abbre</th>
      </tr>
       <xsl:for-each select="SSI/data">
       <tr>
        <td><xsl:value-of select="expanded"/></td>
        <td><xsl:value-of select="abbre"/></td>
       </tr>
       </xsl:for-each>
      </table>
      </body></html>
      </xsl:template>
      </xsl:stylesheet>

Я получил только первую запись тега данных в формате таблицы HTML

    Expanded               Abbre  
    -----------           --------------------  
    Chemical Research     Chem. Res  
    Botany                Bot.

как получить все значения в HTMl ???

1 Ответ

2 голосов
/ 18 января 2011

Если вы очистите свой XSLT и используете xsl:apply-templates вместо xsl:for-each, жизнь станет проще. Почти никогда нет причин использовать xsl:for-each. Попробуйте это:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="/">
        <html>
            <head><title>Abbreviate</title></head>
            <body>
                <table border="1">
                    <tr>
                        <th>Expanded</th>
                        <th>Abbre</th>
                    </tr>
                    <xsl:apply-templates select='SSI/data/expanded'/>
                </table>
            </body></html>
    </xsl:template>

    <xsl:template match="expanded">
        <tr>
            <td><xsl:apply-templates/></td>
            <xsl:apply-templates select='following-sibling::abbre[1]'/>
        </tr>
    </xsl:template>

    <xsl:template match="abbre">
        <td><xsl:apply-templates/></td>
    </xsl:template>

</xsl:stylesheet>

Используя небольшие шаблоны, вы упрощаете свою таблицу стилей. Кроме того, здесь нет реальной причины использовать xsl:value-of - встроенные шаблоны будут работать правильно. Вы получите более простые шаблоны, которые легче понять.

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