2015-05-24 86 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。 –