Как сравнить два элемента от разных родителей в XSL - PullRequest
0 голосов
/ 29 июля 2011

У меня есть HTML-график, похожий на этот:

+------+--------+----------+---------+----------+--------+
| Time | Monday | Tuesday  |Wednesday| Thursday | Friday | 
+======+========+==========+=========+==========+========+
| 8:00 | event1 |          |         |          |        |
+------+--------+----------+---------+----------+--------+
| 9:00 | event1 |          |         |          |        |
+------+--------+----------+---------+----------+--------+
| 10:00| event1 |          | event2  |          |        |
|      |        |          | event3  |          |        |
+------+--------+----------+---------+----------+--------+
| 11:00|        |          | event3  |          |        |
+------+--------+----------+---------+----------+--------+
| 12:00|        |          | event3  |          |        |
+------+--------+----------+---------+----------+--------+
<table>
    <tr>
        <td> Time      </td>
        <td> Monday    </td>
        <td> Tuesday   </td>
        <td> Wednesday </td>
        <td> Thursday  </td>
        <td> Friday    </td>
    </tr>
    <tr>
        <td> 8:00      </td>
        <td> event1    </td>
        <td>           </td>
        <td>           </td>
        <td>           </td>
        <td>           </td>
    </tr>
    <tr>
        <td> 9:00      </td>
    <td> event1    </td>
        <td>           </td>
        <td>           </td>
        <td>           </td>
        <td>           </td>
    </tr>
    <tr>
        <td> 10:00     </td>
        <td> event1    </td>
        <td>           </td>
        <td> event2 </br> event3    </td>     <!-- Comparing to this one while reading the one below -->
        <td>           </td>
        <td>           </td>
    </tr>
    <tr>
        <td> 11:00     </td>
        <td>           </td>
        <td>           </td>
        <td> event3    </td>                  <!-- Reading this one -->
        <td>           </td>
        <td>           </td>
    </tr>
    <tr>
        <td> 12:00     </td>
        <td>           </td>
        <td>           </td>
        <td> event3    </td>
        <td>           </td>
        <td>           </td>
    </tr>
</table>

Возможно ли в одном цикле for-each получить доступ к <td>, который находится в той же позиции, что и его родитель, но в предыдущем <tr>?

Я пытался сделать что-то подобное, и оно отлично работает, за исключением событий event2 и event3, которые одновременно.

<xsl:variable name="periodes">
    <xsl:for-each select="table/tr/td[position() = 2]"> <!-- And to the same for every columns -->
    <xsl:if test="not(.=preceding::td)">
        <starts><xsl:value-of select="../td[position() =1]"/></starts>
    </xsl:if>
    <xsl:if test="not(.=following::td)">
        <ends><xsl:value-of select="../td[position() =1]"/></ends>
            <eventName><xsl:value-of select="."/></eventName>
        </xsl:if>
    </xsl:for-each>
</xsl:variable>
<xsl:for-each select="exslt:node-set($periodes)/*">
    <day>1</day>
    <eventName><xsl:value-of select="eventName"/></eventName>
    <starts><xsl:value-of select="starts"/></starts>
    <ends><xsl:value-of select="ends"/></ends>
</xsl:for-each>

Кроме того, это не работает должным образом, этот метод немного раздражает, так как мне нужно 5 разных циклов для каждого. Это способ, которым я мог бы достичь этого?

Вывод должен быть что-то вроде

<events>
    <event>
        <day>1</day>
        <eventName>event1</eventName>
        <starts>8:00</starts>
        <ends>11:00</ends>
    </event>
    <event>
        <day>3</day>
        <eventName>event2</eventName>
        <starts>10:00</starts>
        <ends>11:00</ends>
    </event>
    <event>
        <day>3</day>
        <eventName>event3</eventName>
        <starts>10:00</starts>
        <ends>13:00</ends>
    </event>
</events>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...