求助:如何使用XSLT将指定XML转换为目标HTML表格格式
解决方案:将XML转换为指定格式的HTML表格
我来帮你搞定这个XSLT转换需求!要实现把你提供的XML转换成指定的HTML表格,核心是先对相同的lineType值进行分组,再按顺序生成对应的Banner行和表格内容。
输入XML
<Items> <item><lineType>STX</lineType></item> <item><lineType>STZ</lineType></item> <item><lineType>STY</lineType></item> <item><lineType>STY</lineType></item> <item><lineType>STZ</lineType></item> <item><lineType>STX</lineType></item> </Items>
对应的XSLT代码
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" indent="yes"/> <!-- 定义分组键,用于按lineType聚合item --> <xsl:key name="lineTypeGroup" match="item" use="lineType"/> <xsl:template match="/Items"> <html> <body> <table border="1"> <!-- 遍历所有唯一的lineType分组 --> <xsl:for-each select="item[generate-id() = generate-id(key('lineTypeGroup', lineType)[1])]"> <!-- 按STX→STY→STZ的固定顺序排序分组 --> <xsl:sort select=" choose( lineType='STX', 1, lineType='STY', 2, lineType='STZ', 3 )"/> <!-- 输出Banner行,跨3列 --> <tr> <td colspan="3">Banner - <xsl:value-of select="position()"/></td> </tr> <!-- 遍历当前分组下的所有item,输出对应行 --> <xsl:for-each select="key('lineTypeGroup', lineType)"> <tr> <td></td> <td><xsl:value-of select="lineType"/></td> <td><xsl:value-of select="lineType"/></td> </tr> </xsl:for-each> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
关键逻辑说明
- 分组实现:通过
<xsl:key>定义分组规则,再用generate-id()筛选出每个lineType分组的第一个元素,以此获取所有唯一的分组项。 - 顺序控制:用
<xsl:sort>配合choose函数,强制让STX、STY、STZ按指定顺序排列,保证Banner的顺序符合预期。 - 表格结构:每个分组先输出一行跨列的Banner,再遍历分组内的所有item,输出包含两个
lineType值的行。
转换后的效果
处理后生成的HTML表格渲染后,会呈现你期望的格式:
Banner - 1
STX STX
STX STX
Banner - 2
STY STY
STY STY
Banner - 3
STZ STZ
STZ STZ
内容的提问来源于stack exchange,提问作者ramesh.metta
相关产品推荐
相关产品推荐

