Xslt xlst:从基本xml到中间xml再到最终输出
这是我先前问题的后续行动 我将尝试用一个通用术语来表达它,因为我认为这将使我能够更好地理解XSLT:什么以及如何使用适当的XSLT IDOM来使用它 这就是我想要的: 输入XML->中间XML->…->最终转变 或者换句话说:我如何在一个XSLT文档中管道化各种XML转换 我的命令行类比是有多个命令行工具来执行部分解决方案,然后让它们使用管道按顺序执行 在这种情况下: 输入XML(带元素)->中间XML(带单独的和元素)->按排序的最终XMLXslt xlst:从基本xml到中间xml再到最终输出,xslt,pipeline,Xslt,Pipeline,这是我先前问题的后续行动 我将尝试用一个通用术语来表达它,因为我认为这将使我能够更好地理解XSLT:什么以及如何使用适当的XSLT IDOM来使用它 这就是我想要的: 输入XML->中间XML->…->最终转变 或者换句话说:我如何在一个XSLT文档中管道化各种XML转换 我的命令行类比是有多个命令行工具来执行部分解决方案,然后让它们使用管道按顺序执行 在这种情况下: 输入XML(带元素)->中间XML(带单独的和元素)->按排序的最终XML 我仅限于一个XSLT文档,因为手头的web工具甚至不
我仅限于一个XSLT文档,因为手头的web工具甚至不允许
xsl:include
或xsl:import
成功 人们容易想到的三种方法是:
- 使用操作系统管道:
我在这里知道的主要缺点是,并非所有处理器都有命令行接口,可以轻松读取stdin上的主输入树。所以当我这样做的时候,我有时会写临时文件;幸运的是,磁盘空间很便宜。好处:你可能已经知道怎么做了xsltproc ss1.xsl input.xml \\ | xsltproc ss2.xsl - \\ | xsltproc ss3.xsl - \\ > output.xml
- 使用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>
优点:所有这些都在一个样式表中,所以当您在六个月后再次使用它时,您永远不必费解如何运行该流程。(你的问题的措辞表明这是你真正想要的答案。)缺点:它都在一个样式表中,所以你必须更加努力地实现模块化和关注点分离
毫无疑问,还有其他方法。也许我误解了这个问题。但是,您可以随意调用xslt命令行工具,并将输出从一个步骤传递到下一个步骤。例如,
xsltproc 1.xlt 1.xml | xsltproc 2.xsl-
。但我更喜欢tmp文件。我希望我能在这里这样做。我使用的工具甚至不允许包含其他xsl文件。考虑到它需要全部都放在一个样式表中,这个XSLT引擎是否允许libxslt“node-set()扩展名”?供应商:libxslt,版本:1.0Tryxsltproc--dumpextensions | grep节点集
查看。当然,您也可以在样式表中使用function-available(),这是因为xsltproc不在命令行中。它集成在icecast服务器中,我不知道他们使用的是哪个版本。我要问一个新问题。我甚至设法回答了这个新问题(: