У меня есть 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>