我正在一个项目中,需要通过编写等效标签将预先编写的xsl文件(250-300行)转换为等效的freemarker模板:像这样,
<sometag>
<xsl:value-of select="something">
</sometag>
进入
<sometag>
${something}
</sometag>
XSLT文件还包含xsl:if
,xsl:for-each
,xsl:choose
等。
以前,我曾经手动完成这项工作,只需要很少的模板就需要付出很多努力,但现在我们有大约65-70个模板。如果手工完成,转换这些模板并不可行。
我应该如何将XSLT转换为另一种格式?我可以使用XSLT来完成这项工作吗?
答案 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,但我会抵制诱惑......