0

私はこの XML を与えられ、そこからかなりの部分をレンダリングする必要があり、ほとんどは正常に動作していますが、キーが要素の と一致し、属性がハードコードされた文字列であるノードセットを抽出しようとして踏みにじらcolorれています (この場合、 )。node-set はパラメーターとしてテンプレートに渡され、各カラー ラインは 1 回だけ表示される必要があります。keybar'data'

<report>
    <settings>
        <colors>
            <color key="1-1" name="frame" value="..." ... />
            <color key="1-1" name="data" value="..." ... />
            <color key="2-1" name="frame" value="..." ... />
            <color key="2-1" name="data" value="..." ... />
            <color key="3-1" name="frame" value="..." ... />
            <color key="3-1" name="data" value="..." ... />
        </colors>
        <comp>
             <cont>
                  <bar key="1-1" .../>
                  <bar key="1-1" .../>
                  <bar key="2-1" .../>
             </cont>
        <comp>
        <!-- possibly more <comp/cont/bar> below that may not be mixed with the above -->
     </settings>
</report>

私のXSLTファイルには、これがあります(抜粋):

<xsl:key name="barnode" match="bar" use="@key"/>
<xsl:key name="colorlookup" match="/report/settings/colors/color" use="@key"/>

<!-- this runs at the `cont` element level, i.e. `bar` can be accessed without prefix -->

<!-- set $x to the node-list of bars with unique @key attribute -->
<xsl:call-template name="renderit">
    <xsl:with-param name="colors">
        <!-- 'bars' contains node-set of 'bar' elements with @key being unique -->
        <xsl:variable name="bars" select="bar[generate-id() = generate-id(key('barnode', @key)[1])]"/>
        <xsl:for-each select="$bars">
            <xsl:value-of select="key('colorlookup', @key)[@name='data']"/>
        </xsl:for-each>
    </xsl:with-param>
</xsl:call-template>

問題は、これがノードセットではなくツリーフラグメントを渡すことです。上記と同じことを行うが、ノードセットを返す選択を行うことは可能ですか?

編集:

予想されるノードセット:

<color key="1-1" name="data" value="..." ... />
<color key="2-1" name="data" value="..." ... />

提示された XSLT がこの結果ツリーのフラグメントを生成するかどうかはわかりません (デバッグ目的で) 印刷する方法がわからないためです。

4

1 に答える 1

2

試す

<xsl:with-param name="colors" select="key('colorlookup', bar[generate-id() = generate-id(key('barnode', @key)[1])]/@key)[@name = 'data']"/>
于 2014-07-14T11:23:26.847 に答える