XSLT Сравнить атрибут со значениями - PullRequest
0 голосов
/ 30 ноября 2018

Эй, у меня быстрый вопрос к домашней работе

У меня есть список в моем xml с жанрами для киношопа, подобный этому:

.....

<genre ID="G3" name="Action"/>
<genre ID="G4" name="Romance"/>
<genre ID="G5" name="Sci-fi">

.... и более

и список фильмов, относящихся к жанрам, подобным следующему:

<movie ID = "F6" titel ="Blood Work" year = "2002" length = "109">
        <!-- Genres --> 
                <genre ID ="G11" />
                <genre ID ="G7" />

.....

На картинкеВы можете видеть, что я получил так далеко.Вместо идентификаторов жанров (G5 и G3) и т. Д. Я хочу их названия.Вот что я устал до сих пор:

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <html>
  <body>
        <xsl:apply-templates select="*"/>
  </body>
  </html>
</xsl:template>

<xsl:template match="movieshop">
<table border="1">
    <tr bgcolor="#9acd32">
   <!--Strukturierung der Tabelle -->
      <th>ID</th>
      <th>Title</th>
      <th>Description</th>
      <th>Genre</th>
      <th>Length (in Minuten)</th>
      <th>Year</th>
    </tr>
   <!--fill table with the elements movies -->
     <xsl:for-each select="//movieshop/movies/movie">
    <tr>
     <!-- ID of the movie  -->
      <td><xsl:value-of select="@ID"/></td>
     <!-- titel of the movie  -->
      <td><xsl:value-of select="@titel"/></td>
      <!-- Description of the movie  -->
      <td><xsl:value-of select="details/@inhalt"/></td>
       <!-- Genre of the movie  -->
    <td> 
    <xsl:for-each select="genre/@ID">
                    <xsl:call-template name="resultGenres">
                        <xsl:with-param name="id" select="."/>
                    </xsl:call-template>
    </xsl:for-each> 
    </td>
       <!-- Length -->
      <td><xsl:value-of select="@length"/></td>
       <!-- Year -->
      <td><xsl:value-of select="@year"/></td>  
    </tr>
 </xsl:for-each>
</table>
</xsl:template>

<xsl:template name="resultGenres">
            <xsl:param name="id"/>
    <!--Just testing what id is -->
            <p>Genre: <xsl:value-of select = "$id" /></p>
            <xsl:for-each select="//movieshop/genres/genre[ID=$id]">
                <xsl:call-template name="resultGenre"/>
            </xsl:for-each>
</xsl:template>

<xsl:template name="resultGenre">
        <xsl:value-of select="//movieshop/genres/genre/@name"/>
        <br/>
</xsl:template>



</xsl:stylesheet>

ошибка должна быть где-то здесь:

<xsl:for-each select="//movieshop/genres/genre[ID=$id]">

нет результатов для этого, даже если G1 и так далее существует в моем списке.Извините, если я что-то неправильно написал в коде.Попробовал изменить все слова на английский.Заранее спасибо: D

Предварительный просмотр моего результата

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