Я пытаюсь «вложить» xsl: для каждого (я думаю) - PullRequest
0 голосов
/ 27 марта 2019

Очень просто я пытаюсь составить список предметов по другому предмету - я пытался упростить его, имея только два уровня: название группы и их компакт-диски

Я пробую несколько разных способов- но не могу заставить xsl разбить xml на отдельные столбцы в таблице.

Это на самом деле для веб-сайта свойств и должно показывать арендную плату, достигнутую для определенных свойств - но чтобы упростить использование полоси их диски кажутся проще ....

Мой XML

<catalog>
  <artist>
    <name>Band 1</name>
    <titles>
      <title>CD Title 1</title>
      <title>CD Title 2</title>
      <title>CD Title 3</title>
      <title>CD Title 4</title>
      <title>CD Title 5</title>
      <title>CD Title 6</title>
      <title>CD Title 7</title>
    </titles>
  </artist>
  <artist>
    <name>Band 2</name>
    <titles>
      <title>CD Title 10</title>
      <title>CD Title 20</title>
      <title>CD Title 30</title>
    </titles>
  </artist>
  <artist>
    <name>Band 3</name>
    <titles>
      <title>CD Title 100</title>
      <title>CD Title 200</title>
      <title>CD Title 300</title>
      <title>CD Title 400</title>
      <title>CD Title 500</title>
      <title>CD Title 600</title>
      <title>CD Title 700</title>
      <title>CD Title 800</title>
    </titles>
  </artist>
</catalog>

Мой XSL

  <xsl:template match="/">
    <html>
    <body>
    <table border="1">
      <tr bgcolor="#ff3366">
        <th>Artist</th>
        <th>Title</th>
      </tr>
      <xsl:for-each select="catalog/artist">
        <tr>
          <td><xsl:value-of select="name"/></td>

          <td><xsl:value-of select="titles"/></td>
        </tr>
      </xsl:for-each>
    </table>
    </body>
    </html>
  </xsl:template>

Что я хочу !!

<table border="1">
  <tr>
    <th>Artist</th>
    <th>Title</th>
  </tr>
  <tr>
    <td>Band 1</td>
    <td>CD Title 1</td>
    <tr><td></td><td>CD Title 2</td></tr>
    <tr><td></td><td>CD Title 3</td></tr>
    <tr><td></td><td>CD Title 4</td></tr>
    <tr><td></td><td>CD Title 6</td></tr>
    <tr><td></td><td>CD Title 7</td></tr>
    <tr><td></td><td>CD Title 8</td></tr>
  </tr>
  <tr>
    <td>Band 2</td>
    <td>CD Title 10</td>
    <tr><td></td><td>CD Title 20</td></tr>
    <<tr><td></td><td>CD Title 30</td></tr>
    <tr><td></td><td>CD Title 40</td></tr>
    <<tr><td></td><td>CD Title 50</td></tr>
    <tr><td></td><td>CD Title 60</td></tr>
  </tr>
  <tr>
    <td>Band 3</td>
    <<td>CD Title 100</td>
    <tr><td></td><td>CD Title 200</td></tr>
    <tr><td></td><td>CD Title 300</td></tr>
    <tr><td></td><td>CD Title 400</td></tr>
  </tr>
</table>


What I get

<html>
  <body>
    <table border="1">
      <tr bgcolor="#ff3366">
        <th>Artist</th>
        <th>Title</th>
      </tr>
      <tr>
        <td>Band 1</td>
        <td>CD Title 1CD Title 2CD Title 3CD Title 4CD Title 5CD Title 6CD Title 7</td>
      </tr>
      <tr>
        <td>Band 2</td>
        <td>CD Title 10CD Title 20CD Title 30</td>
      </tr>
      <tr>
        <td>Band 3</td>
        <td>CD Title 100CD Title 200CD Title 300CD Title 400CD Title 500CD Title 600CD Title 700CD Title 800</td>
      </tr>
    </table>
  </body>
</html>

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

Вот что я наконец-то придумала после того, как вы, ребята, помогли !!!

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

<xsl:template match="/catalog">
    <html>
    <body>
    <table border="1">
      <tr bgcolor="#ff3366">
        <th>Artist</th>
        <th>Title</th>
      </tr>
      <xsl:apply-templates select="artist" />
    </table>
    </body>
    </html>
  </xsl:template>

<xsl:template match="artist">
  <tr>
    <td><xsl:value-of select="name"/></td>
    <xsl:apply-templates select="titles/title" />
  </tr>
</xsl:template>

<xsl:template match="title[1]">
  <td><xsl:value-of select="text()"/></td>
</xsl:template>

  <xsl:template match="title">
    <tr>
        <td></td>
        <td><xsl:value-of select="text()"/></td>
    </tr>
  </xsl:template>

</xsl:stylesheet>
0 голосов
/ 27 марта 2019

Я сомневаюсь, что ваш желаемый результат HTML верен, потому что ваш первый title сделает необычное исключение.

Так что следующий код XSLT-1.0 создаст (надеюсь) желаемый результат.Я также изменил организацию таблицы стилей с for-each циклов на шаблоны.

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

<xsl:template match="/catalog">
    <html>
    <body>
    <table border="1">
      <tr bgcolor="#ff3366">
        <th>Artist</th>
        <th>Title</th>
      </tr>
      <xsl:apply-templates select="artist" />
    </table>
    </body>
    </html>
  </xsl:template>

<xsl:template match="artist">
  <tr>
    <td><xsl:value-of select="name"/></td>
    <xsl:apply-templates select="titles/title" />
  </tr>
</xsl:template>

<xsl:template match="title[1]">
  <td><xsl:value-of select="text()"/></td>
</xsl:template>

  <xsl:template match="title">
    <tr>
        <td><xsl:value-of select="text()"/></td>
    </tr>
  </xsl:template>

</xsl:stylesheet>

Его результат:

<html>
   <body>
      <table border="1">
         <tr bgcolor="#ff3366">
            <th>Artist</th>
            <th>Title</th>
         </tr>
         <tr>
            <td>Band 1</td>
            <td>CD Title 1</td>
            <tr>
               <td>CD Title 2</td>
            </tr>
            <tr>
               <td>CD Title 3</td>
            </tr>
            <tr>
               <td>CD Title 4</td>
            </tr>
            <tr>
               <td>CD Title 5</td>
            </tr>
            <tr>
               <td>CD Title 6</td>
            </tr>
            <tr>
               <td>CD Title 7</td>
            </tr>
         </tr>
         <tr>
            <td>Band 2</td>
            <td>CD Title 10</td>
            <tr>
               <td>CD Title 20</td>
            </tr>
            <tr>
               <td>CD Title 30</td>
            </tr>
         </tr>
         <tr>
            <td>Band 3</td>
            <td>CD Title 100</td>
            <tr>
               <td>CD Title 200</td>
            </tr>
            <tr>
               <td>CD Title 300</td>
            </tr>
            <tr>
               <td>CD Title 400</td>
            </tr>
            <tr>
               <td>CD Title 500</td>
            </tr>
            <tr>
               <td>CD Title 600</td>
            </tr>
            <tr>
               <td>CD Title 700</td>
            </tr>
            <tr>
               <td>CD Title 800</td>
            </tr>
         </tr>
      </table>
   </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...