我有以下 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 块内部设置原始块的属性,以便复制的节点将使用修改后的属性?
先感谢您。