2009-10-14 64 views
7

這是我第一次使用XSLT。我正在嘗試創建一個文件,用於將從我使用的程序中導出的XML數據文件轉換爲HTML報告。XSLT可以解析一串文本嗎?

一個元素的值是路徑的圖像文件,但產生的路徑是

C:\Documents and Settings\me\Desktop\xml export\cd000402.jpg 

的絕對路徑,但我想只是文件名的相對路徑。

有沒有通過XLST文件解析出文件名的方法?

回答

12

XPath包含substring-after函數,該函數返回第一個出現的另一個字符串後面的字符串。這是不夠的本身,而是一個模板,如以下可能做到這一點:

<xsl:template name="filename-only"> 
    <xsl:param name="path" /> 
    <xsl:choose> 
     <xsl:when test="contains($path, '\')"> 
      <xsl:call-template name="filename-only"> 
       <xsl:with-param name="path" select="substring-after($path, '\')" /> 
      </xsl:call-template> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:value-of select="$path" /> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

可用一組字符串函數並不十分廣泛,但我發現,這是對於大多數應用足夠好您需要使用XSLT。

0

XSLT藉助於XPath 2.0及其各種string functions可幫助處理這類事情。

例子:
假設在問題中提到的路徑[爲JPG文件]來自一個XML片段相似

... 
<For_HTML> 
    <Image1> 
     <Path>C:\Documents and Settings\me\Desktop\xml export\cd000402.jpg</Path> 
     <Description>Photo of the parking lot</Description> 
     <Width>123</Width> 
     ... 
    </Image1> 
</For_HTML> 

XSLT片段看起來像

<xsl:template match='//For_HTML/Image1'> 
    <img src='http://myNewServer.com/ImageBin/{substring-after(./Path,"\xml export\")}' 
      alt='{./Description}' 
      width=' .... you got the idea' 
    /> 
</xsl:template> 

注:沒」沒有時間去測試;但看起來是正確的。

+0

您不能將XSLT標籤放入模板文件屬性中。改用'{...}'。 – 2009-10-15 01:00:33

+0

@Greg男人,你很好!保持我們所有人的誠實;-)並且經常教導我們。謝謝。修復並測試! – mjv 2009-10-15 02:18:18