0

我有一个如下所示的 HTML 时间表:

+------+--------+----------+---------+---------+- --------+
| 时间 | 星期一 | 星期二 |星期三| 星期四 | 星期五 |
+======+=========+===========+=========+==========+= ========+
| 8:00 | 事件1 | | | | |
+------+--------+----------+---------+---------+- --------+
| 9:00 | 事件1 | | | | |
+------+--------+----------+---------+---------+- --------+
| 10:00| 事件1 | | 事件2 | | |
| | | | 事件3 | | |
+------+--------+----------+---------+---------+- --------+
| 11:00| | | 事件3 | | |
+------+--------+----------+---------+---------+- --------+
| 12:00| | | 事件3 | | |
+------+--------+----------+---------+---------+- --------+
<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 个不同的 for-each 循环。他们是我可以实现这一目标的一种方式吗?

输出应该类似于

<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>
4

0 回答 0