关键字xsl:template可能不包含xsl:next-match

时间:2014-03-28 10:50:24

标签: xml xslt xslt-3.0

有人可以解释一下为什么以下内容会给我错误: Keyword xsl:template may not contain xsl:next-match

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"  version = "3.0">

<xsl:template match="*">
  <xsl:value-of select="name(.)"/><br/>
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="rc2">
  <h1>this is first match</h1>
  <xsl:next-match/>
</xsl:template>

</xsl:stylesheet>

虽然这个版本没有错误,但当然只有一个匹配

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"  version = "3.0">

<xsl:template match="*">
  <xsl:value-of select="name(.)"/><br/>
  <xsl:apply-templates/>
  <xsl:next-match/>
</xsl:template>

<xsl:template match="rc2">
  <h1>this is first match</h1>
</xsl:template>

</xsl:stylesheet>

我的测试xml文件是:

<?xml version="1.0"?>
<rc2/>

(问题修订编辑) 我正在使用Msxml2.XSLTemplate.6.0,Msxml2.FreeThreadedDOMDocument.6.0和Msxml2.DOMDocument.6.0

1 个答案:

答案 0 :(得分:4)

您使用的XSLT处理器是什么? xsl:next-match需要XSLT 2.0,我的猜测是你使用的是XSLT 1.0处理器。

你说版本=&#34; 3.0&#34;在xsl:stylesheet标题中,这使事情变得复杂。如果样式表说版本=&#34; 3.0&#34;并且您使用XSLT 1.0处理器运行它,然后它将以&#34;前向兼容模式&#34;运行。在此模式下,XSLT 1.0中不可用的XSLT指令仅在实际执行时才会导致错误。我们的想法是允许您运行样式表,在其中动态决定要执行哪些代码模板,方法是询问处理器支持的内容,例如使用system-property()或element-available()函数。