如何使用XSLT将XSLT源文件转换为Freemarker源文件

时间:2015-09-02 05:32:50

标签: xslt freemarker

我正在一个项目中,需要通过编写等效标签将预先编写的xsl文件(250-300行)转换为等效的freemarker模板:像这样,

<sometag>
<xsl:value-of select="something">
</sometag>

进入

<sometag>
${something}
</sometag>

XSLT文件还包含xsl:ifxsl:for-eachxsl:choose等。

以前,我曾经手动完成这项工作,只需要很少的模板就需要付出很多努力,但现在我们有大约65-70个模板。如果手工完成,转换这些模板并不可行。

我应该如何将XSLT转换为另一种格式?我可以使用XSLT来完成这项工作吗?

2 个答案:

答案 0 :(得分:0)

你问这个问题被标记为XSLT,所以我不把它当作“哪个工具最好”的请求,而是作为“我应该如何使用XSLT完成这个任务”的请求。

在XSLT中,您可以处理XSLT,因为无论如何XSLT本身都是XML。因此,将您的XSLT作为输​​入文件并按照您习惯的方式编写XSLT。例如,您提供的示例可以写为:

<xsl:template match="xsl:value-of">
    <xsl:text>${</xsl:text>
    <xsl:value-of select="@select"/>
    <xsl:text>}</xsl:text>
</xsl:template>

由于听起来您要将其作为一次性工作运行,因此您应该选择XSLT 2.0或3.0,以免省去克服XSLT 1.0的限制。

答案 1 :(得分:0)

Freemarker,IIRC,是使用尖括号但不是非常XML的语言之一。使用XSLT在这种语言中生成输出的棘手问题是决定是否生成XML输出然后调整序列化(例如通过使用disable-output-escaping或字符映射),或生成文本输出(在这种情况下,您可以& #39;使用生成元素和属性节点的XSLT构造作为其输出。)

因为这里的代码量相当小(我曾经涉及过拥有250K行XSLT和类似Freemarker代码的项目),另一个选择是使用XSLT进行大量转换然后&#34;手调&#34;它通过人工后处理。

我喜欢讨论为什么使用Freemarker优先于XSLT,但我会抵制诱惑......