2012-12-25 75 views
3

我試圖從一個文檔繼承一些XML到另一個,但我希望它在它到達時被註釋掉。所以,我想要做這樣的事情:XSLT註釋標記不輸出內容?

<xsl:template name="process"> 
    <figure> 
     <xsl:comment> 
      <xsl:copy /> 
     </xsl:comment> 
    </figure> 
</xsl:template> 

當我運行它使用直的Java XSLT處理器,我得到的線沿線的東西:

<figure> 
<!-- 







    --> 
    </figure> 

奇怪的是,如果我跑它沒有評論對象,如:

<xsl:template name="process"> 
    <figure> 
      <xsl:copy /> 
    </figure> 
</xsl:template> 

內容通過就好了。

任何想法?我想也許你不能在評論中使用元素,但我查了一下,它應該沒問題。

回答

5

從一規範(Section 7.4, Creating Comments),重點煤礦:

,如果實例XSL的內容是錯誤的:註釋創建一個比文本節點的其他節點。 XSLT處理器可能會發出錯誤信號;如果它沒有指示錯誤,則必須通過忽略違規節點及其內容來恢復。

因此,無論你看着它,你的信息是錯誤的。它不應該工作。

您將不得不在註釋中創建看起來像 XML的文本。這要麼很困難,要麼很容易,具體取決於您使用的XSLT處理器。

撒克遜例如具有serialize()擴展功能,這使得瑣碎的任務:

<xsl:comment> 
    <xsl:value-of select="saxon:serialize($node-set, 'default')" /> 
</xsl:comment> 

這需要在你的XSLT撒克遜命名空間聲明:

<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:saxon="http://saxon.sf.net/" 
> 
+0

+1的一個很好的答案。祝你節日快樂! :) –

+0

謝謝@Dimitre。你也是! – Tomalak

+0

這絕對解決了這個謎團。非常感謝,Tomalak! – NickChase