xslt:从基础xml到中间xml到最终输出

时间:2013-06-23 14:25:37

标签: xslt pipeline

这是对我之前的问题xslt split mp3 tag into artist and title

的跟进

我会尝试用通用术语来表达它,因为我认为我可以更好地理解XSLT:使用适当的XSLT idom使用它是什么以及如何使用它。

这就是我想要的:

  

输入XML - >中间XML - > ... - >最终转型

或者换句话说:如何在一个XSLT文档中管理各种XML转换

我的命令行类比是拥有多个执行解决方案部分的命令行工具,然后使用管道以后续顺序执行它们。

在这个具体案例中:

  

输入XML(带元素) - >中间XML(带有单独的和元素) - >最终XML排序依据,

我仅限于一个XSLT文档,因为手头的网络工具甚至不允许xsl:includexsl:import成功。

1 个答案:

答案 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>
    

    上升:它只是在一个样式表中,所以当你六个月后回到它时,你永远不必弄清楚如何运行这个过程。 (并且你的问题的措辞说明这是你真正想要的答案。)缺点:它只是在一个样式表中,所以你必须更加努力地实现模块化和关注点的分离。

无疑还有其他方法。