如何在XSLT生成的表格中按日期匹配填充对应天气数据
解决方案
实现逻辑
- 原代码的错误点是没有为7个星期列生成对应占位单元格,直接将温度内容输出到了错误列位。我们可以预先定义与表头顺序一致的星期列表,遍历每条天气数据时依次匹配星期列:匹配成功则填充天气和温度信息,匹配失败则输出空单元格占位,即可实现数据对应到正确星期列的效果。
完整修改后的XSLT代码
<xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"> <!-- 定义与表头顺序一致的星期缩写列表 --> <xsl:variable name="weekOrder" select="'MonTueWedThuFriSatSun'" /> <xsl:template match = "/forecast"> <html> <body> <h1> <xsl:value-of select="@queryLocation"/> [<xsl:value-of select="@queryTime"/>] </h1> <table border="1" width="100%"> <tr id="days" bgcolor="#FFA500" align="center"> <th>Date</th> <th>Mon</th> <th>Tue</th> <th>Wed</th> <th>Thu</th> <th>Fri</th> <th>Sat</th> <th>Sun</th> </tr> <xsl:for-each select = "weather"> <xsl:sort select="@yyyymmdd"/> <tr> <!-- 左侧日期列 --> <td bgcolor="#FFA500" align="center"> <xsl:value-of select = "date "/> <xsl:variable name="month" select="month"/> <xsl:choose> <xsl:when test="$month=1"> 一月</xsl:when> <xsl:when test="$month=2"> 二月</xsl:when> <xsl:when test="$month=3"> 三月</xsl:when> <xsl:when test="$month=4"> 四月</xsl:when> <xsl:when test="$month=5"> 五月</xsl:when> <xsl:when test="$month=6"> 六月</xsl:when> <xsl:when test="$month=7"> 七月</xsl:when> <xsl:when test="$month=8"> 八月</xsl:when> <xsl:when test="$month=9"> 九月</xsl:when> <xsl:when test="$month=10"> 十月</xsl:when> <xsl:when test="$month=11"> 十一月</xsl:when> <xsl:when test="$month=12"> 十二月</xsl:when> </xsl:choose> </td> <!-- 循环生成7个星期列的单元格 --> <xsl:for-each select="(//*)[position() <= 7]"> <xsl:variable name="currentWeekIdx" select="position()" /> <xsl:variable name="currentWeek" select="substring($weekOrder, ($currentWeekIdx - 1)*3 + 1, 3)" /> <td align="center"> <xsl:if test="$currentWeek = ../dayOfWeek"> <xsl:value-of select="../lowest"/>° - <xsl:value-of select="../highest"/>° <br/> <xsl:value-of select="../overall"/> </xsl:if> </td> </xsl:for-each> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
效果说明
以上代码会自动匹配每条天气数据对应的星期,将温度、天气描述填充到对应列,其余列留空,完全符合预期效果。比如6月12日周六的天气数据会自动填充到Sat列,显示23°-28° 伴有雷暴多云。
内容的提问来源于stack exchange,提问作者moo moo
相关产品推荐
相关产品推荐

