这是我第一次使用XSLT。我正在尝试创建一个文件,将从我使用的程序导出的XML数据文件转换为HTML报告。
元素的值之一是图像文件的路径,但生成的路径是绝对路径,例如
C:\Documents and Settings\me\Desktop\xml export\cd000402.jpg
但我想要一个只有文件名的相对路径。
有没有办法通过XLST文件解析出文件名?
答案 0 :(得分: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中需要的大多数应用程序来说已经足够了。
答案 1 :(得分:2)
这有点超出了问题的范围,但Michael Kay has an excellent paper使用XSLT 2将纯文本解析为XML。
答案 2 :(得分:2)
是的,请参阅a general LR(1) parser implemented in XSLT 2.0.(仅限245行)。
我用它实现了a parser for JSON和XPath 2.0的解析器 - 完全在XSLT中。
答案 3 :(得分:0)
例:
假设有问题的路径[到jpg文件]来自类似于
...
<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>
注意:没时间测试;但这看起来是正确的。
答案 4 :(得分:0)