主文件:
<xsl:stylesheet id="myid"
<xsl:for-each select=".">
<xsl:import href="{concat(@attr1,@attr2)}"/>
</xsl:for-each>
<xsl:template name="content">
bla bla bla
<xsl:call-template name="templatename">
</xsl:call-template>
</xsl:template>
</stylesheet>
我需要做这样的事情,从目录导入foreach中的多个文件&这取决于现有文件的数量。
所有现有的文件都是这样的:
file1.xslt:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet id="my_awesome_id">
<xsl:import href="default-master"/>
<xsl:output method="xml" version="1.0" encoding="utf-8" omit-xml-declaration="yes" media-type="text/xml" indent="yes"/>
<xsl:template name="content">
blablabla
</xsl:template>
<xsl:template name="templatename">
I really need help for this one :/
</xsl:template>
</xsl:stylesheet>
这棵树就像:
文件夹
|_file1.xslt
|_file2.xslt
|_mainFile.sxlt
|_file3.xslt
|_等等。。。
我对这个问题的解决方案一无所知。
我想实现文件夹的所有xslt的动态导入。Srry,如果以前不清楚的话。我需要导入文件夹中的所有文件,而不关心文件的数量或名称。(我有一个动态Xml,它保存了文件夹的xslt文件的所有名称和路径)
您需要将所有xsl:import
和xsl:include
作为样式表的xsl:stylesheet/xsl:transform
根元素的子元素。而且你无法计算href
的值。如果您想以编程方式构建XSLT,那么您当然可以编写一个XSLT来创建另一个XSLT作为输出,但执行生成的XSLT是一个单独的步骤。
您无法在执行样式表的同时完成您想要做的事情-构建样式表。那么还有什么选择呢?很难知道,因为你没有告诉我们你想要实现什么,所以你只向我们展示了一个非工作的尝试。但是,如果你真的需要构建一个包含目录树某个特定分支中所有模块的样式表,那么你可以通过两个阶段的过程来实现:首先构建样式表,然后运行它。要构建样式表,可以执行以下操作:
<xsl:transform....>
<xsl:variable name="xn" select="'http://www.w3.org/1999/XSL/Transform'"/>
<xsl:template name="main">
<xsl:element name="stylesheet" namespace="{$xn}"/>
<xsl:for-each select="collection('.?select=*.xslt')">
<xsl:element name="import" namespace="{$xn}"/>
</xsl:for-each....
(我在这里使用xsl:element在XSLT命名空间中创建元素;另一种方法是使用xsl:namespace别名)
这依赖于Saxon对collection()函数的实现,该函数能够选择目录中的文件。对于另一个处理器,您可能需要找到替代方案。