2009-08-18 48 views
3

我想用两个不同的XSLT文件(两步视图)将XML文件转换两次。是否有可能这样做?是否可以使用XSLT创建“两步视图”

实施例: data.xml中 - >通过first.xsl转化 - >由second.xsl转化 - - >第一变换(XML)的结果>第二变换的结果(HTML)

回答

3

不幸的是,与标准兼容XSLT 1.0:不,这是不可能的。

在XSLT 2.0中,模板的返回值可以用作另一个模板的输入;因此升级到XSLT 2.0(在其他许多方面也更容易使用)将为您解决这一限制。

另一个解决方法是使用node-set扩展函数:但是,这是非标准的,显然不支持相同的任何位置:有关详细信息,请参阅http://www.xml.com/pub/a/2003/07/16/nodeset.html

1

在XSLT 2.0中支持 - 只需在<xsl:variable/>中捕获第一个转换的结果,然后将模板(可能具有不同模式)应用于xml文档/片段的顶层子元素(或任何其他后代)在xsl:变量中。

在XSLT 1.0中,必须使用xxx:node-set()扩展,它将xsl:变量(RTF类型为Result Tree Fragment)的内容转换为常规的XML文档/片段。

该扩展功能由EXSLT标准化 - XSLT 1.0扩展功能的“最标准”和广泛实现的库。

+0

尽管我从未完全理解在1.0中需要“结果树片段”数据类型。它经常咬伤我,我真的不知道为什么它首先存在。你能阐明这一点吗? – Tomalak 2009-08-18 14:23:41

+0

@Tomalak XSLT 1.0工作组中的一些人同意James Clark的目的是为了防止XSLT被用作编程语言......当然,这并没有阻止语言,只有一种简单的扩展函数和FXSL等库,人们可以在XSLT中做任何事情。然后来到了XSLT 2.0,这个错误得到了纠正。 – 2009-08-18 20:50:59

相关问题