Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 基于XML文件名创建文件路径_Xslt_Gruntjs_Xslt 1.0 - Fatal编程技术网

Xslt 基于XML文件名创建文件路径

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:

有没有办法创建文件路径来自文件名的grunt构建

我有:

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年以来)处理器:,(我自己的)。