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> 

注:没”没有时间去测试;但看起来是正确的。

+0

您不能将XSLT标签放入模板文件属性中。改用'{...}'。 – 2009-10-15 01:00:33

+0

@Greg男人,你很好!保持我们所有人的诚实;-)并且经常教导我们。谢谢。修复并测试! – mjv 2009-10-15 02:18:18

这有点超出了问题的范围,但是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中。

+1

你可以给出关于你的脚本的一些细节吗?仅链接回答通常不会有用,因为某些链接会在一段时间后消失。 – Bernhard 2013-07-13 17:04:27

+0

请澄清你的答案 – Stephan 2013-07-13 17:04:44