我有一个这样的 XML
<filters>
<ISP_WebItem FILTER="Type" FILTERNAME="Farvet" UNITCODE="" />
<ISP_WebItem FILTER="Antal i pakke" FILTERNAME="1" UNITCODE="Farvepatro" />
<ISP_WebItem FILTER="Farve" FILTERNAME="Rød" UNITCODE="" />
<ISP_WebItem FILTER="Farve" FILTERNAME="Blå" UNITCODE="" />
<ISP_WebItem FILTER="Farve" FILTERNAME="Gul" UNITCODE="" />
<ISP_WebItem FILTER="Printer mærke" FILTERNAME="HP" UNITCODE="" />
</filters>
我想将此 XML 转换为类似这样的 HTML
Type = Farvet
Antal i pakke = 1
farve =Rød,Blå,Gul etc
Printer mærke =HP
您可以看到三个“FILTER”属性具有相同的值“Farve”。在我的 HTML 中,我希望它们以逗号分隔。作为执行此操作的第一步,我使用 Muenchian_grouping 对该 XML 的元素进行了分组,这样如果两个或多个 FILTER 属性相同,它们就会相邻。
然后我做了这样的事情
<xsl:for-each select="$filt-grouped-formatted//ISP_WebItem[position() = 1 or @FILTER != preceding-sibling::*[1]/@FILTER ]">
<xsl:variable name="current_filter" select="@FILTER" />
<tr>
<td width="200px">
<xsl:value-of select="$current_filter"/>:
</td>
<td>
<xsl:value-of select="@FILTERNAME"/>
<xsl:if test="@UNITCODE != ''">
<xsl:text> </xsl:text>
<xsl:value-of select="@UNITCODE"/>
</xsl:if>
<xsl:variable name="current_grouped_filter" select="$filt-grouped-formatted[@FILTER = $current_filter]" />
<xsl:if test="count($current_grouped_filter) > 0">
<textarea>
<xsl:copy-of select="$current_grouped_filter"/>
</textarea>
<xsl:text>, </xsl:text>
<xsl:for-each select="$current_grouped_filter">
<xsl:value-of select="@FILTERNAME"/>
<xsl:if test="@UNITCODE != ''">
<xsl:text> </xsl:text>
<xsl:value-of select="@UNITCODE"/>
</xsl:if>
<xsl:if test="count($current_grouped_filter) > position()">,</xsl:if>
</xsl:for-each>
</xsl:if>
</td>
</tr>
</xsl:for-each>
唯一我无法实现的是分组元素没有出现。任何人都可以建议我在代码中进行编辑。