次の xsl テンプレートがあります。
<xsl:template match="@*|node()" mode="fix-entity-references">
<xsl:copy>
<xsl:for-each select="@*">
<xsl:if test="name() = 'href'">
<xsl:variable name="hrefvar">
<xsl:value-of select="current()"/>
</xsl:variable>
<xsl:attribute name="href">
anything
</xsl:attribute>
</xsl:if>
</xsl:for-each>
<xsl:apply-templates select="@*|node()" mode="fix-entity-references"/>
</xsl:copy>
</xsl:template>
このテンプレートを使用して現在のノードをコピーしたいのですが、それはすべての属性を処理した後でのみです。現在のサンプルは非常に単純で、非常に単純なブロックに置き換えることができます。テスト式はさらに複雑になります。ポイントは、式を満たすすべての要素に N 個の属性が存在する可能性があるということです。これが for-each が必要な理由です。これらの属性をすべて同じ方法で処理したいと考えています。「current()」値を出力しようとしましたが、常に正常に動作します。問題は、元のノードの属性を更新することです。「href」属性の値を「anything」に設定しても機能しません。これを呼び出すまでに、現在のノードが属性自体であることを意味する for-each ブロック内にあると思います。
コピーされたノードが変更された属性を使用するように、for-each ブロック内から元のブロックの属性を設定するにはどうすればよいですか?
前もって感謝します。