2015-08-20 23 views
1

有沒有辦法創建文件路徑來自文件名的grunt構建?基於XML文件名創建文件路徑

我:

xsltproc: { 
     options: { 
     stylesheet: 'templates/xmlCompiler.xsl' 
     }, 
     compile: { 
     files: [{ 
      expand: true, 
      cwd: 'resources/dist/xml', 
      src: '*.xml', 
      dest: 'build', 
      ext: '.html' 
     }] 
     } 
    }, 

基於.xml文件,這基本上將創建.html文件。現在,我有一個任務來創建每個HTML文件,具有結構:

編譯/ 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。

它試圖看文件,但我找不到任何文件。你們有任何想法或鏈接指導我嗎?

+0

歡迎光臨!您可以突出顯示/結構/格式化您的示例並處理第一個句子,這讓我感到困惑。玩的開心! – Felix

+0

我只是重新寫我的問題。感謝Felix指出了它。 :) – hmuljono

回答

0

現在,我有個任務創建的每一個HTML文件具有的結構:
編譯/ 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,大多數處理器以某種方式支持)。但由於您沒有提供任何關於您使用的處理器的信息,我無法進一步提供建議。

+0

謝謝阿貝爾。我不知道XSLT可能是一個可能的解決方案。我現在正在研究它,但是我在上得到了咕嚕聲。 「../resources/dist/xml」是XML的結構。對於你所說的處理器,你的意思是用grunt中的xsltproc(grunt.loadNpmTasks('grunt-xsltproc');)? – hmuljono

+0

@hmuljono,我不熟悉Grunt,但是當我檢查[xsltproc for GruntJs](https://www.npmjs.com/package/grunt-xsltproc)時,我發現它是一個命令行插件。然而,捆綁處理器是xsltproc,它是XSLT 1.0(1999)。在XSLT 1.0 **中,你的任務遠不是微不足道的(沒有擴展函數)。也許你可以選擇不同的處理器?市場上大約有四到五個XSLT 2.0(自2007年以來)處理器:[Saxon](http://saxonica.com),[Exselt](http://exselt.net)(我自己的),[XmlPrime] (http://xmlprime.com),[Altova Raptor](http://www.altova.com/raptorxml.html)。 – Abel