Xslt 基于XML文件名创建文件路径
有没有办法创建文件路径来自文件名的grunt构建 我有:Xslt 基于XML文件名创建文件路径,xslt,gruntjs,xslt-1.0,Xslt,Gruntjs,Xslt 1.0,有没有办法创建文件路径来自文件名的grunt构建 我有: xsltproc: { options: { stylesheet: 'templates/xmlCompiler.xsl' }, compile: { files: [{ expand: true, cwd: 'resources/dist/xml', src: '*.xml', dest:
xsltproc: {
options: {
stylesheet: 'templates/xmlCompiler.xsl'
},
compile: {
files: [{
expand: true,
cwd: 'resources/dist/xml',
src: '*.xml',
dest: 'build',
ext: '.html'
}]
}
},
它基本上会基于.xml文件创建.html文件。现在,我的任务是创建每个HTML文件,使其具有以下结构:
build/xmlfilename/index.html
例如:
xml文件:xml/aa.xml,xml/bb.xml,xml/cc.xml。
构建后,它变成:build/aa/index.html,build/bb/index.html,build/cc/index.html
它试图查看文档,但我找不到。你们有什么想法或链接来指导我吗
现在,我的任务是创建每个HTML文件,使其具有以下结构:build/xmlfilename/index.html HTML文件没有文件结构,它基本上只是一个文本文件。我假设您的意思是要处理多个XML文件,并将它们存储在不同的目录中 假设您使用XSLT 2.0(否则无论如何都不可能创建多个结果文档),您可以执行以下操作:
<xsl:template name="main">
<xsl:apply-templates select="collection('xml/*.xml')" />
</xsl:template>
<xsl:template match="/">
<xsl:variable name="path" select="replace(base-uri(), '.xml', '/')" />
<xsl:result-document href="{$path}index.html">
<xsl:apply-templates />
</xsl:result-document>
</xsl:template>
此代码假设处理器将自动创建不存在的目录。如果它不这样做,您应该求助于扩展函数(或者编写一个UriResolver
,大多数处理器都以某种方式支持它)。但由于您并没有提供任何关于您使用的处理器的信息,所以我不能给出更多的建议
现在,我的任务是创建每个HTML文件,使其具有以下结构:build/xmlfilename/index.html HTML文件没有文件结构,它基本上只是一个文本文件。我假设您的意思是要处理多个XML文件,并将它们存储在不同的目录中 假设您使用XSLT 2.0(否则无论如何都不可能创建多个结果文档),您可以执行以下操作:
<xsl:template name="main">
<xsl:apply-templates select="collection('xml/*.xml')" />
</xsl:template>
<xsl:template match="/">
<xsl:variable name="path" select="replace(base-uri(), '.xml', '/')" />
<xsl:result-document href="{$path}index.html">
<xsl:apply-templates />
</xsl:result-document>
</xsl:template>
此代码假设处理器将自动创建不存在的目录。如果它不这样做,您应该求助于扩展函数(或者编写一个
UriResolver
,大多数处理器都以某种方式支持它)。但是,由于您没有提供有关您使用的处理器的任何信息,我无法提供更多建议。欢迎光临SO!你可以稍微突出/组织/格式化你的例子,然后写第一句话,我觉得读起来很困惑。玩得高兴我只是重新措辞我的问题。谢谢菲利克斯指出这一点。:)欢迎光临!你可以稍微突出/组织/格式化你的例子,然后写第一句话,我觉得读起来很困惑。玩得高兴我只是重新措辞我的问题。谢谢菲利克斯指出这一点。:)谢谢你,亚伯。我不知道XSLT是一个可能的解决方案。我现在正在调查,但我的grunt构建失败了。“./resources/dist/xml”是xml的结构。对于您所说的处理器,您指的是grunt中的xsltproc(grunt.loadNpmTasks('grunt-xsltproc');)?@hmuljono,我不熟悉grunt,但当我检查它时,我发现它是命令行的插件。但是,捆绑的处理器是xsltproc,即XSLT1.0(1999)。在XSLT1.0中(没有ext.functions),您的任务绝不是微不足道的。也许您可以选择不同的处理器?市场上大约有四五个XSLT2.0(自2007年以来)处理器:,(我自己的),谢谢Abel。我不知道XSLT是一个可能的解决方案。我现在正在调查,但我的grunt构建失败了。“./resources/dist/xml”是xml的结构。对于您所说的处理器,您指的是grunt中的xsltproc(grunt.loadNpmTasks('grunt-xsltproc');)?@hmuljono,我不熟悉grunt,但当我检查它时,我发现它是命令行的插件。但是,捆绑的处理器是xsltproc,即XSLT1.0(1999)。在XSLT1.0中(没有ext.functions),您的任务绝不是微不足道的。也许您可以选择不同的处理器?市场上大约有四五个XSLT2.0(自2007年以来)处理器:,(我自己的)。