有人可以解释一下为什么以下内容会给我错误:
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
答案 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()函数。