【发布时间】:2010-11-11 08:18:26
【问题描述】:
是否可以匹配不属于属性子集的属性?例如,我想匹配除@attr1 和@attr2 之外的所有内容。有没有办法编写类似于以下的模板匹配语句,还是我的方法不对?
<xsl:template match="NOT(@attr1) and NOT(@attr2)">
谢谢
【问题讨论】:
是否可以匹配不属于属性子集的属性?例如,我想匹配除@attr1 和@attr2 之外的所有内容。有没有办法编写类似于以下的模板匹配语句,还是我的方法不对?
<xsl:template match="NOT(@attr1) and NOT(@attr2)">
谢谢
【问题讨论】:
最简单的方法是使用两个模板:
<xsl:template match="@attr1|@attr2"/>
<xsl:template match="@*">
....
</xsl:template>
第一个模板将捕获对那些你想忽略的引用,并简单地吃它们。第二个将匹配剩余的属性。
【讨论】:
原始查询是可能的。使用以下内容:
<xsl:template match="@*[local-name()!='attr1' and local-name()!='attr2']">
....
</xsl:template>
如果您想更改属性或在缺少单个复制操作时添加它,这将特别有用。另一个答案在这种情况下不起作用。例如
...
<xsl:copy>
<xsl:attribute name="attr1">
<xsl:value-of select="'foo'"/>
</xsl:attribute>
<xsl:apply-templates select="@*[local-name()!='attr1']|node()"/>
</xsl:copy>
...
【讨论】: