2016-04-06 2 views
0

Я пытаюсь получить из файла xml, который содержит данные о некоторых фильмах, всех фильмах, которые играют на этой неделе, но он выводит мне все фильмы .. Я новичок в xml и xslt поэтому любая помощь будет оценена! Мой XML выглядит следующим образом:xslt: извлекать данные из файла xml, сравнивая даты

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="movies.xsl"?> 
<?xml-stylesheet type="text/css" href="movies.css"?> 
<movies> 
    <movie> 
     <title> Title1 </title> 
     <actor> Actor1 </actor> 
     <genre> Genre1 </genre> 
     <dateOfPlaying>20160403</dateOfPlaying> 
     <duration> Duration1 </duration> 
    </movie> 
    <movie> 
     <title> Title2 </title> 
     <actor> Actor2 </actor> 
     <genre> Genre2 </genre> 
     <dateOfPlaying>20160420</dateOfPlaying> 
     <duration> Duration2 </duration> 
    </movie> 
    <movie> 
     <title> Title2 </title> 
     <actor> Actor2 </actor> 
     <genre> Genre2 </genre> 
     <dateOfPlaying>20160406</dateOfPlaying> 
     <duration>Duration3</duration> 
    </movie> 
</movies> 

и XSL файла:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
<xsl:template match="/"> 
    <html> 
     <body> 
      <h2> Movies report </h2> 
       <table> 
        <xsl:for-each select="movies/movie"> 
         <xsl:if test="number(dateOfPlaying) > 20160401 and number(dateOfPlaying) < 20160408"> 
         <tr> 
          <td> 
           <xsl:value-of select="title"/> 
          </td> 
          <td> 
           <xsl:value-of select="actor"/> 
          </td> 
          <td> 
           <xsl:value-of select="genre"/> 
          </td> 
          <td> 
           <xsl:value-of select="dateOfPlaying"/> 
          </td> 
          <td> 
           <xsl:value-of select="duration"/> 
          </td> 
         <tr> 
         </xsl:if> 
        </xsl:for-each> 
       </table> 
      </body> 
     </html> 
    </xsl:template> 
</xsl:stylesheet> 

ответ

1

Вам нужно это:

<xsl:if test="dateOfPlaying &gt; 20160401 and dateOfPlaying &lt; 20160408">

Я также вижу, у вас есть неправильный <tr> перед </xsl:if> исправить его до </tr>

Ниже XSL:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
<xsl:template match="/"> 
    <html> 
     <body> 
      <h2> Movies report </h2> 
       <table> 
        <xsl:for-each select="movies/movie"> 
         <xsl:if test="dateOfPlaying &gt; 20160401 and dateOfPlaying &lt; 20160408"> 
         <tr> 
          <td> 
           <xsl:value-of select="title"/> 
          </td> 
          <td> 
           <xsl:value-of select="actor"/> 
          </td> 
          <td> 
           <xsl:value-of select="genre"/> 
          </td> 
          <td> 
           <xsl:value-of select="dateOfPlaying"/> 
          </td> 
          <td> 
           <xsl:value-of select="duration"/> 
          </td> 
         </tr> 
         </xsl:if> 
        </xsl:for-each> 
       </table> 
      </body> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 

Выход выглядит следующим образом:

Фильмы сообщить

Title1 Actor1 Genre1 20160403 длительность1
Заголовок 2 Actor2 Genre2 20160406 20160430

+0

Я пытался вам версию тоже, но он все еще кладет в стол, все фильмы ... – Nelly

+0

Я добавил e xsl, вы можете попробовать это. Также попробуйте комментировать ваши фильмы.css в xml и посмотрите - просто чтобы исключить, что это проблема с css – SomeDude

+0

Да, вы были правы .. Большое спасибо! – Nelly

Смежные вопросы