2014-09-19 27 views
0

我們的GSA使用FileConnector來索引作爲DFS鏈接目標的不同份額。我正嘗試在前端XSL中將file://filesrv01.example.com/share$/dir/file.ext重寫爲file://R:/hare/dir/file.ext這是substring-after和concat破壞我的編碼嗎?

有針對不同協議xsl:choose元素至極測試,但沒有file://,所以我假設默認處理我的源鏈接將是這樣的節點:

<xsl:otherwise> 
    <xsl:value-of disable-output-escaping='yes' select="U"/> 
</xsl:otherwise> 

我們創建了一個新的xsl:when節點是這樣的:

<xsl:when test="starts-with(U, 'file://server.example.com/share$> 
    <xsl:value-of disable-output-escaping='yes' 
    select="concat('file://R:/share/', 
     substring-after(U,'file://server.example.com/share$/'))"/> 
</xsl:when> 

這適用於我們索引中的幾乎所有條目,但當路徑包含德語變音符時,它會失敗。繼輸入,實際和預期輸出:

file://server/share$/dir/FileWithUmläut.txt 
file://R:/share/dir/FileWithUmläut.txt 
file://R:/share/dir/FileWithUmläut.txt 

爲什麼工作的默認xsl:otherwise不改變變音符號,但我們的concat +子是不是?任何我可以檢查或更改的東西?

編輯#1 XSL文件中只有一個輸出元素:<xsl:output method="html"/>。 XSL本身在Notepad ++中被識別爲ANSI,在UI文本中帶有一些Umlauts。輸出到瀏覽器是utf-8 xhtml。

編輯#2 當我用下面的塊代替xsl:when時,編碼不會中斷,鏈接可以打開(不使用DFS根目錄,而是直接使用unc)。因此,我相信它不是XML或XSL的編碼,儘管如此,感謝您的輸入@MathiasMüller。

<xsl:when test="starts-with(U, 'file://server.example.com/share$/')"> 
    <xsl:value-of disable-output-escaping='yes' select="U"/> 
</xsl:when> 
+0

我想第三行應該是實際產出,第二行應該是預期產出?在我看來,這與'concat'或'xsl:otherwise'無關。 XML文件是如何編碼的?如果此元素存在,那麼樣式表的編碼和'xsl:output'的encoding屬性是什麼? – 2014-09-19 10:42:22

+0

@MathiasMüller第二和第三行是從Internet Explorer複製的acutal鏈接。輸出源中的第三個(非工作)鏈接是'file:// R:/ share/dir/FileWithUml%C3%A4.txt' – 2014-09-19 11:08:05

+0

這並不回答我所有的問題。轉換的輸入是XML - 它的編碼是什麼?你能否將樣式表的編碼更改爲UTF-8,並且明確指定'? – 2014-09-19 11:16:09

回答

0

爲我所用,而不是file:///R:/file://R:/(額外的正斜槓),但我仍然試圖找出爲什麼,幫助我的具體問題就不見了。在GSA XSL中有一個JavaScript片段,用於在IE中「修復」編碼問題,但不關心協議是否有2或3個斜線。

雖然Firefox不允許開箱即用的文件協議,但從這裏複製時,兩種語法都不起作用。這使我相信,當前安裝的IE 9在使用正確的file:///前綴時自己修復了一些編碼問題,而Firefox不支持。

正如我們希望鏈接在Firefox中工作一樣,我將繼續追求在unicode領域的輝煌,受到古老的龍file:///和IE和FF房屋的困擾。

+1

另外,請注意,更改網址格式確實會影響文檔預覽。文檔預覽匹配確切的U標籤。 – 2014-09-23 03:30:21

+0

感謝您的支持,我很快就會想知道爲什麼我們有爲我們的網站預覽,但不是爲文件...它看起來像我需要編寫一些JavaScript來修復PreviewData。 – 2014-09-24 13:15:30