2013-07-25 75 views
2

我試圖將我的批處理文件調用薩克森(版本8.9)到XProc管道(葫蘆)。 這是我批調用:XSLT與XProc - 參數綁定在所需的類型

java -jar saxon8.jar -o out.xml in.xml style.xsl +config=config-file.cfg 

的參數配置,那麼在樣式表中定義了這種方式:

<xsl:param name="config" as="document-node()"/> 

的XPROC部分看起來是這樣的:

<p:load name="configLoad"> 
    <p:with-option name="href" select="'config-file.cfg'"/> 
</p:load> 
<p:xslt name="config"> 
    <p:input port="source"> 
     <p:document href="in.xml"/> 
    </p:input> 
    <p:input port="parameters"> 
     <p:inline> 
      <c:param name="config"> 
       <p:pipe port="result" step="configLoad"/> 
      </c:param> 
     </p:inline> 
    </p:input> 
    <p:input port="stylesheet"> 
     <p:document href="style.xsl"/> 
    </p:input> 
</p:xslt> 

錯誤信息是這樣的:

需要我變量$ config的tem類型的值是document-node();提供的值有項目類型爲xs:字符串

我知道<p:exec>一步,但我不想使用它,因爲在配置文件中應當由其他XSLT tranformations後產生。它也應該被其他XProc步驟重用。

是否有可能使用正確的參數類型調用XSLT樣式表? 感謝您的幫助!

回答

2

看起來你現在的XProc標準運氣不好。它指出參數是名稱/值對,其中值必須爲的數據類型爲untypedAtomic的字符串。不要問我爲什麼..

http://www.w3.org/TR/xproc/#parameters

如果你不會構成動態配置的內容,而僅僅是通過周圍的固定文件的內容,你可以只傳遞到一個路徑適當的配置文件,並使用fn:doc()從XSLT文件中讀取它。

我建議不要動態地寫配置文件。 XProc中的執行順序可能不如你期望的那樣順序。

另一種方法是將每個配置設置作爲單獨的參數傳遞,但是每個設置仍然必須符合扁平參數值類型。

HTH!

+0

謝謝,這給了我確定性。我認爲,但我錯過了你鏈接的這條線。 是的,執行順序是其中一個問題,我拒絕了p:exec步驟。那麼我認爲我可以在自己宣佈的步驟中強制執行這個命令。但這不是一個好的解決方案。 雖然,感謝您的幫助! –

+0

我遇到同樣的問題。我的XSLT接收2個xml文件,一個用於主輸入,另一個用於參數。第二個也是由XProc中的另一個XSLT自動生成的。現在,唯一的解決方法是通過p:store在XProc中臨時生成第二個文件,將此臨時文件的URL傳遞給XSLT,並在整個管道完成後刪除它。 – chansey

+0

@chansey我很確定你可以聚合來自兩個來源的輸入,並將它們作爲一個輸入文檔輸入到第二個XSLT步驟。從磁盤寫入和讀取不保證是順序的或同步的。也許發表一個關於這個新問題? – grtjn

相關問題