2013-08-22 3 views
0

XML:XSLT, как проверить, если элемент существует в массиве

<Calendars xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Urnik.xsd"> 
    <Calendar> 
     <Name>Marko</Name> 
     <Days> 
      <Day> 
       <Date>2013-05-13</Date> 
       <DayType>1</DayType> 
       <DayWorking>1</DayWorking> 
       <WorkingTimes> 
        <WorkingTime> 
         <FromTime>08:00</FromTime> 
         <ToTime>11:00</ToTime> 
         <Name>Izpit Matematika</Name> 
         <Owner>Marko</Owner> 
         <Category> 
          <School Professor="111" Room="1" Subject="882" /> 
         </Category> 
        </WorkingTime> 
        <WorkingTime> 
         <FromTime>13:00</FromTime> 
         <ToTime>17:00</ToTime> 
         <Name>Vaje APZ</Name> 
         <Owner>Marko</Owner> 
         <Category> 
          <School Professor="222" Room="11" Subject="881"/> 
         </Category> 
        </WorkingTime>  
        <WorkingTime> 
         <FromTime>20:00</FromTime> 
         <ToTime>22:00</ToTime> 
         <Name>Vaje aaaaaa</Name> 
         <Owner>Marko</Owner> 
         <Category> 
          <School Professor="222" Room="11" Subject="881"/> 
         </Category> 
        </WorkingTime>      
       </WorkingTimes> 
      </Day> 
      <Day> 
       <Date>2013-05-14</Date> 
       <DayType>2</DayType> 
       ... 
      </Day> 

XSLT:

<xsl:for-each select="Calendar/Days/Day"> 
    <xsl:choose> 
     <xsl:when test="DayType = 1"> 
      <xsl:variable name="vTransfers" select="child::*/WorkingTime"/>     

Могу ли я каким-то образом проверить эту переменную vTransfers если 08:00 существуют в FromTime. Я не хочу зацикливаться на нем. Мне нужно поместить его в строку TD. И я сейчас в этом TD, и мне нравится проверять, есть ли 08:00 в FromTime в этом массиве.

Я пытаюсь что-то вроде

<xsl:when test="contains($vTransfers/ToTime, '08:00')"> 
         <xsl:text>IN</xsl:text> 
        </xsl:when> 
        <xsl:otherwise>          
         <xsl:text>OUT</xsl:text> 
        </xsl:otherwise> 

но всегда принимает только один Елки и не проверить весь массив.

+1

Вы всегда должны включать в выходной HTML, который вы хотите видеть. (Кроме того, поскольку вы удалили свой предыдущий вопрос: вам удалось решить его самостоятельно?) – Tomalak

ответ

3

Если вы передадите узел на contains, он преобразуется в строку. Это означает, что берется только строковое значение первого узла. Попробуйте что-то вроде этого:

<xsl:when test="$vTransfers[contains(ToTime, '08:00')]"> 

Это должно работать, тоже:

<xsl:when test="WorkingTimes/WorkingTime/ToTime = '08:00'"> 
+0

Проще: '' - 'содержит () 'здесь избыточно. – Tomalak