apply-template matching只会变为默认值

时间:2014-10-06 16:52:19

标签: xml xslt xpath xslt-2.0

我有一个XSL文件,它在XSLT 2.0中匹配模板规则,只是为了检查哪个模板规则具有更高的优先级。但它只会设置为默认值,即使设置了优先级,也不会显示给其他人。您可以在此处看到它:http://xsltransform.net/nc4NzQ5/4我的XSL文件是架构感知的。

以下是我的XML

  <test>test</test>
  <test attr1="1">test2</test>
  <test attr1="2">test3</test>
  <test attr3="4">test4</test>
  <test attr4="4">test5</test>
  <test attr5="3">test6</test>

XSL文件是:

<xsl:template match="doc">
        <out>
         <xsl:apply-templates select="*"/>
        </out>
</xsl:template>

      <xsl:template match="test"><match>test</match></xsl:template>
      <xsl:template match="element(test)[attr1='1']"><match>element(test)[attr1='1']</match></xsl:template>
      <xsl:template match="element(test)[attr1='2']"><match>element(test)[attr1='2']</match></xsl:template>
      <xsl:template match="element(test)[attr3='4']"><match>element(test)[attr3='4']</match></xsl:template>

输出为:

<match>test</match>
<match>test</match>
<match>test</match>
<match>test</match>
<match>test</match>
<match>test</match>

1 个答案:

答案 0 :(得分:3)

以下更新的XSLT将按预期运行:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="2.0" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="doc">
    <out>
        <xsl:apply-templates select="*"/>
    </out>
  </xsl:template>

  <xsl:template match="test"><match>test</match></xsl:template>
  <xsl:template match="test[@attr1='1']"><match>test[@attr1='1']</match></xsl:template>
  <xsl:template match="test[@attr1='2']"><match>test[@attr1='1']</match></xsl:template>
  <xsl:template match="test[@attr3='4']"><match>test[@attr1='1']</match></xsl:template>

</xsl:stylesheet>

备注:

  1. element(test)可以简化为匹配模式中的test
  2. 在谓词模式中使用@在属性名称之前。