2014-03-28 48 views
2

有人能解釋我爲什麼要在下面給我的錯誤:在這個版本中沒有給出錯誤 Keyword xsl:template may not contain xsl:next-match關鍵字的xsl:模板可能不包含XSL:下一個匹配

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

回答

4

您使用的是哪種XSLT處理器? xsl:next-match需要XSLT 2.0,我的猜測是您使用的是XSLT 1.0處理器。

您在xsl:樣式表頭中說過version =「3.0」,這會使事情變得複雜。如果樣式表的版本=「3.0」,並且您使用XSLT 1.0處理器運行它,則它將以「forwards-compatibility mode」運行。在這種模式下,XSLT 1.0中不可用的XSLT指令只有在實際執行時纔會導致錯誤。這個想法是允許你運行樣式表,通過詢問處理器它支持什麼,例如使用system-property()或element-available()函數來動態決定要執行的代碼模板。

+0

Msxml2.XSLTemplate.6.0,Msxml2.FreeThreadedDOMDocument.6.0,Msxml2.DOMDocument.6.0,我仍在閱讀關於xslt 2.0和3.0的支持,但您的回答讓我感覺很滿意,因爲我已經嘗試了很多它的變化似乎只在實際執行「下一次匹配」時纔會出現錯誤 –