XSLT do not match certain attributes

2019-01-26 13:50发布

Is it possible to match attributes that do not belong to a subset of attributes? For example, I would like to match everything but @attr1 and @attr2. Is there a way to write a template match statement similar to the following, or am I going about this the wrong way?

<xsl:template match="NOT(@attr1) and NOT(@attr2)">      

Thanks

标签: xslt xpath
2条回答
放我归山
2楼-- · 2019-01-26 14:09

The easiest way would be to use two templates:

<xsl:template match="@attr1|@attr2"/>
<xsl:template match="@*">
    ....
</xsl:template>

The first template will catch the references to those you want to ignore, and simply eat them. The second will match the remaining attributes.

查看更多
一夜七次
3楼-- · 2019-01-26 14:12

What is the op asking is possible. Use the following:

<xsl:template match="@*[local-name()!='attr1' and local-name()!='attr2']">
    ....
</xsl:template>

This is especially useful if you want to change an attribute or add it if missing withing a single copy operation. The other answer does not work in such situation. e.g.

  ...
  <xsl:copy>
     <xsl:attribute name="attr1">
        <xsl:value-of select="'foo'"/>
     </xsl:attribute>
     <xsl:apply-templates select="@*[local-name()!='attr1']|node()"/>
  </xsl:copy>
  ...
查看更多
登录 后发表回答