XSLT可以解析一串文本吗?
问题描述:
这是我第一次使用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>
注:没”没有时间去测试;但看起来是正确的。
答
是的,见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