Группировка преобразований XML с использованием XSLT2 - PullRequest
0 голосов
/ 02 февраля 2012

Я новичок в XSLT, и у меня возникает следующая проблема при попытке использовать XSLT2 и процессор altovaXML.

<?xml version="1.0"?>
 <document>
  <row>
   <WEEK>11</WEEK>
   <PERIOD>201103</PERIOD>
   <ILPROD>some item</ILPROD>
   <CNME>some name</CNME>
   <QTY>100</QTY>
   <SP>40</SP>
   <REV>4000</REV>
   <COST>2000</COST>
   <VA>2000</VA>
   <VAP>50</VAP>
  </row>
</document>

Мой XSL выглядит следующим образом

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:template match="/">
  <html>
  <body>
  <h2>Some text</h2>
  <table border="1">
    <tr bgcolor="#9acd32">
      <th>Analysis</th>
    </tr>
    <xsl:for-each-group select="document/row" group-by="ILPROD">
    <xsl:for-each select="current-group()">
      <tr>
      <td><xsl:value-of select="WEEK"/></td>
      <td><xsl:value-of select="PERIOD"/></td>
      <td><xsl:value-of select="ILPROD"/></td>
    </tr>
    </xsl:for-each>
    <tr><td>&nbsp</td></tr>
    </xsl:for-each-group>
    </table>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>

Очень простоЯ пытаюсь сгруппировать по дочернему узлу "ILPROD" и выводить пробел после каждой группы.Звучит просто, но я, очевидно, делаю основную ошибку, потому что процессор говорит, что не может загрузить документ.Это нормально работает, если я уберу группировку.

Есть идеи, где я ошибаюсь?

1 Ответ

1 голос
/ 02 февраля 2012

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

<tr><td colspan="3"><br></br></td></tr>

И не забудьте изменить вывод на html:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html"/>

<xsl:template match="/">
  <html>
  <body>
  <h2>Some text</h2>
  <table border="1">
    <tr bgcolor="#9acd32">
      <th>Analysis</th>
    </tr>
    <xsl:for-each-group select="document/row" group-by="ILPROD">
    <xsl:for-each select="current-group()">
      <tr>
      <td><xsl:value-of select="WEEK"/></td>
      <td><xsl:value-of select="PERIOD"/></td>
      <td><xsl:value-of select="ILPROD"/></td>
    </tr>
    </xsl:for-each>
    <tr><td colspan="3"><br></br></td></tr>
    </xsl:for-each-group>
    </table>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>

Когда я запускаю это в Altova XML, я получаю правильный вывод:

<html>
    <body>
        <h2>Some text</h2>
        <table border="1">
            <tr bgcolor="#9acd32">
                <th>Analysis</th>
            </tr>
            <tr>
                <td>11</td>
                <td>201103</td>
                <td>some item</td>
            </tr>
            <tr>
                <td colspan="3"><br></td>
            </tr>
        </table>
    </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...