这是对我之前的问题xslt split mp3 tag into artist and title
的跟进我会尝试用通用术语来表达它,因为我认为我可以更好地理解XSLT:使用适当的XSLT idom使用它是什么以及如何使用它。
这就是我想要的:
输入XML - >中间XML - > ... - >最终转型
或者换句话说:如何在一个XSLT文档中管理各种XML转换?
我的命令行类比是拥有多个执行解决方案部分的命令行工具,然后使用管道以后续顺序执行它们。
在这个具体案例中:
输入XML(带元素) - >中间XML(带有单独的和元素) - >最终XML排序依据,
我仅限于一个XSLT文档,因为手头的网络工具甚至不允许xsl:include
或xsl:import
成功。
答案 0 :(得分:4)
很容易想到的三种方法是:
使用操作系统管道:
xsltproc ss1.xsl input.xml \\
| xsltproc ss2.xsl - \\
| xsltproc ss3.xsl - \\
> output.xml
我所知道的主要缺点是,并非所有处理器都具有命令行界面,可以轻松读取stdin上的主输入树。所以,当我这样做时,我有时最终会写临时文件;幸运的是,磁盘空间很便宜。好处:你可能已经知道如何做到这一点。
使用XProc管道。
主要缺点:你必须学习一项新技术。主要好处:你可以学习一种新技术,这实际上非常酷。
为不同的操作定义不同的模式,并使用XSLT 2.0(或带有某种形式的节点集扩展的XSLT 1.0处理器)来处理数据:
<xsl:template match="/">
<xsl:variable name="tree1">
<xsl:apply-templates mode="mode1"/>
</xsl:variable>
<xsl:variable name="tree2">
<xsl:apply-templates mode="mode2" select="$tree1"/>
</xsl:variable>
<xsl:apply-templates mode="mode3" select="$tree2"/>
</xsl:template>
上升:它只是在一个样式表中,所以当你六个月后回到它时,你永远不必弄清楚如何运行这个过程。 (并且你的问题的措辞说明这是你真正想要的答案。)缺点:它只是在一个样式表中,所以你必须更加努力地实现模块化和关注点的分离。
无疑还有其他方法。