這是我第一次使用XSLT。我正在嘗試創建一個文件,用於將從我使用的程序中導出的XML數據文件轉換爲HTML報告。XSLT可以解析一串文本嗎?
一個元素的值是路徑的圖像文件,但產生的路徑是
C:\Documents and Settings\me\Desktop\xml export\cd000402.jpg
的絕對路徑,但我想只是文件名的相對路徑。
有沒有通過XLST文件解析出文件名的方法?
這是我第一次使用XSLT。我正在嘗試創建一個文件,用於將從我使用的程序中導出的XML數據文件轉換爲HTML報告。XSLT可以解析一串文本嗎?
一個元素的值是路徑的圖像文件,但產生的路徑是
C:\Documents and Settings\me\Desktop\xml export\cd000402.jpg
的絕對路徑,但我想只是文件名的相對路徑。
有沒有通過XLST文件解析出文件名的方法?
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。
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>
注:沒」沒有時間去測試;但看起來是正確的。
這有點超出了問題的範圍,但是Michael Kay has an excellent paper關於使用XSLT 2將純文本解析爲XML。
是的,見a general LR(1) parser implemented in XSLT 2.0.(只有245行)。
我已經用它實現了a parser for JSON和XPath 2.0的解析器 - 完全在XSLT中。
您不能將XSLT標籤放入模板文件屬性中。改用'{...}'。 – 2009-10-15 01:00:33
@Greg男人,你很好!保持我們所有人的誠實;-)並且經常教導我們。謝謝。修復並測試! – mjv 2009-10-15 02:18:18