【问题标题】:XSLT do not match certain attributesXSLT 与某些属性不匹配
【发布时间】:2010-11-11 08:18:26
【问题描述】:

是否可以匹配不属于属性子集的属性?例如,我想匹配除@attr1 和@attr2 之外的所有内容。有没有办法编写类似于以下的模板匹配语句,还是我的方法不对?

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

谢谢

【问题讨论】:

    标签: xslt xpath


    【解决方案1】:

    最简单的方法是使用两个模板:

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

    第一个模板将捕获对那些你想忽略的引用,并简单地吃它们。第二个将匹配剩余的属性。

    【讨论】:

    • 如果在脚本中的其他点我想处理被排除的属性怎么样。你知道这是否仍然可能吗?基本上我有数百个属性需要匹配,所有属性都需要相同的操作,只有很小的子集需要特殊处理。所以我想排除那些需要特殊处理的,直到我决定处理它们。我基本上只需要打印出属性名称和分配的值。
    • 我实际上使用模式与您上面的解决方案相结合解决了这个问题。
    【解决方案2】:

    原始查询是可能的。使用以下内容:

    <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>
      ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-08
      • 1970-01-01
      • 1970-01-01
      • 2011-10-16
      • 2011-12-01
      • 2016-04-15
      • 2011-10-02
      • 1970-01-01
      相关资源
      最近更新 更多