2013-03-21 161 views
1

我試圖將一個csv文件轉換成與Saxon 9的xml文件。 但我有一個問題,當我嘗試檢查是否存在並使用xslt函數讀取csv文件時: unparsed (), unparsed-text()在xsl中讀取遠程csv文件

它們對本地文件正常工作,但是當我將遠程文件作爲參數傳遞時,unparsed-text-available()返回false。

例如,當我通過「D:\ test \ test.csv」時, 有效。 當我通過「\\ remote-computer \ test \ test.csv」時,它找不到它。

這裏是我的XSL文件的一部分:

<xsl:template match="/" name="main"> 
    <xsl:choose> 
    <xsl:when test="unparsed-text-available($pathToCSV)"> 
     <xsl:variable name="csv" select="unparsed-text($pathToCSV)"/>      
      .... 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:text>Cannot locate : </xsl:text><xsl:value-of select="$pathToCSV"/> 
    </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

看來,文件()可以讀取遠程文件,但僅限於XML文件。

你知道我可以用於這種情況的一些其他功能嗎?在xslt或撒克遜?

+0

這將是一個選項,只是網絡共享映射爲驅動器? – 2013-03-21 15:28:39

+0

感謝您的回覆,文件路徑由其他人的兩個反斜槓自動生成。如果沒有其他解決方案,我會考慮這一點。 – houghstc 2013-03-21 15:43:28

回答

0

您必須將該路徑轉換爲有效的URI。

喜歡的東西:

unparsed-text(concat('file://',translate($pathToCSV,'\','/'))) 
+0

這是正確的。但是,將UNC文件名轉換爲URI是一種黑色藝術。它似乎在週二的替代工作。更具體地說,它取決於你正在使用的操作系統/文件服務器軟件的版本(並且不要問我細節)。 – 2013-03-21 16:50:06

+0

@MichaelKay - 非常好的一點。此外,另一個可能派上用場的函數是'encode-for-uri()'。 – 2013-03-21 16:55:32