私はこのような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
同じ値「Farve」を持つ3つの「FILTER」属性があることがわかります。私のHTMLでは、コンマで区切って表示したいと思います。これを行うための最初のステップとして、Muenchian_groupingを使用してこのXMLの要素をグループ化し、2つ以上の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>
私が達成できない唯一のことは、グループ化された要素が来ていないことです。誰かが私にコードの編集を提案できますか。