1

私の変換では、いくつかの要素が繰り返しテストされる表現があります。冗長性を減らすために、これを次のようにカプセル化したいと思いますxsl:key(機能しません):

<xsl:key name="td-is-empty" match="td" use="not(./node()[normalize-space(.) or ./node()])" />

true期待される動作は、式が正常に評価された場合とそうでない場合のブール値を生成するための鍵falseです。次に、次のように使用したいと思います。

<xsl:template match="td[not(key('td-is-empty', .))]" />

これは可能ですか? はいの場合、どのように?

4

1 に答える 1

1

XSLT 1.0 では、キー値は常に​​ string 型であると思います。サンプルでは、​​キー値は stringtrueまたはstring のいずれかになりますfalsekey('td-is-empty', 'true')次に、式が true であるすべてのtd要素ノードをkey('td-is-empty', 'false')検索し、式が false であるすべての要素を検索するために呼び出すことができtdます。

ただし、ノード ID に基づいてuse各ノードの式の結果を格納するなど、キーで別のことをしたいようです。tdそれが XSLT でのキーのしくみだとは思いません。

[編集] ただし、要件を次のように表現できる場合があります

<xsl:template match="td[count(. | key('td-is-empty', 'false')) = count(key('td-is-empty', 'false'))]">...</xsl:template>

tdこれは、 によって検出された要素のセットのメンバーである要素と一致しkey('td-is-empty', 'false')ます。

于 2012-12-20T13:31:16.517 に答える