2015-05-24 124 views
0

最近我對XSLT的奇妙能力感到驚訝。我發現最有趣的事情之一就是使用XSLT處理其他XSLT文檔以生成動態模板。儘管我可以想象使用原始文本輸出在輸出中生成必需的XSL標籤(例如,<![CDATA[<xsl:value-of="" />]]>)的方式可以輕鬆完成,但由於XSLT根據定義爲XML文檔,因此確實可以生成有效的XSLT輸出一個XML樹。如果可以做到這一點,又不會混淆XSLT解析器(因爲輸入模板和輸出都會存在於同一個命名空間中),這怎麼做呢?XSLT輸出XSLT

+2

閱讀上的xsl:命名空間別名 – Pawel

+1

使用XSLT來生成另一個XSLT的例子樣式表可以在XSLT規範本身中找到:http://www.w3.org/TR/xslt/#element-namespace-alias –

回答

0

感謝Pawel對於xsl:namespace-alias的洞察力。我似乎沒有在搜索引擎上打出正確的關鍵字。對於任何有興趣在一個工作方案,一個例子可以是:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:axsl="http://www.w3.org/1999/XSL/TransformAlias"> 

<xsl:namespace-alias stylesheet-prefix="axsl" result-prefix="xsl"/> 

<xsl:template match="/"> 
    <axsl:stylesheet version="1.0"> 
     <axsl:template match="/"> 
      <axsl:value-of select="'Some text'" /> 
     </axsl:template> 
    </axsl:stylesheet> 
</xsl:template> 

</xsl:stylesheet> 

這將導致輸出:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
     <xsl:value-of select="'Some text'" /> 
    </xsl:template> 
</xsl:stylesheet> 
+0

如果你看看http://www.cloudformatter.com/Nimbus,它是究竟是如何工作的。它使用xslt將從HTML和CSS派生的xml轉換爲用於xsl fo的xslt。 –