1

特定の属性でグループ化するコードがあります。正確な属性名を指定するとうまくいきます。ただし、Javascript xsltProcessor.setParameter を使用して、グループ化される属性名を設定するようにパラメータ化したいと思います。

私の知る限り、XSLT 1.0 では、変数またはパラメーターを xsl:key の一致または使用属性で使用することは許可されていません。したがって、この方法でパラメーター化できない場合は、使用したいグループ別属性と同じ数の XSL ファイルを作成する必要があると思います。誰かが私にトリックや解決策を与えることができれば、それは深く感謝しています.

属性を正確に指定するxlsは次のとおりです。これは正常に機能します。

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes"/>

    <xsl:key name="groupName" match="stickieshighlights/item" use="@color"/>
    <xsl:key name="eachitem" match="stickieshighlights/item" use="concat(@color,'|', @id)"/>

    <xsl:template match="stickieshighlights">
        <stickieshighlights>
             <xsl:apply-templates select="item[generate-id()=generate-id(key('groupName',@color)[1])]" mode="groupby"/>
        </stickieshighlights>
    </xsl:template>

    <xsl:template match="item" mode="groupby">
        <color name="{@color}">
             <xsl:apply-templates select="key('groupName',@color)[generate-id()=generate-id(key('eachitem',concat(@color,'|', @id))[1])]" mode="list"/>
        </color>
    </xsl:template>

    <xsl:template match="item" mode="list">
        <item id="{@id}" icon="{@icon}" date="{@date}" tags="{@tags}" url="{@url}" title="{@title}" content="{@content}" >
        </item>
    </xsl:template>   

    </xsl:stylesheet>  

これはパラメーターを使用しようとしていますが、エラーが発生します: キーは式に変数を含めることはできません。

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes"/>

    <xsl:param name="group_By" />

    <xsl:key name="groupName" match="stickieshighlights/item" use="$group_By"/>
    <xsl:key name="eachitem" match="stickieshighlights/item" use="concat($group_By,'|', @id)"/>

    <xsl:template match="stickieshighlights">
        <stickieshighlights>
             <xsl:apply-templates select="item[generate-id()=generate-id(key('groupName',$group_By)[1])]" mode="groupby"/>
        </stickieshighlights>
    </xsl:template>

    <xsl:template match="item" mode="groupby">
        <xsl:element name="{$group_By}" > 
        <xsl:attribute name="{{$group_By}}"><xsl:value-of select="current()"/></xsl:attribute>
             <xsl:apply-templates select="key('groupName',$group_By)[generate-id()=generate-id(key('eachitem',concat($group_By,'|', @id))[1])]" mode="list"/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="item" mode="list">
        <item id="{@id}" icon="{@icon}" color="{@color}" date="{@date}" tags="{@tags}" url="{@url}" title="{@title}" content="{@content}" >
        </item>
    </xsl:template>   

    </xsl:stylesheet>
4

0 に答える 0