XSLT可以解析一串文本吗?

时间:2009-10-14 23:14:20

标签: string parsing xslt fxsl

这是我第一次使用XSLT。我正在尝试创建一个文件,将从我使用的程序导出的XML数据文件转换为HTML报告。

元素的值之一是图像文件的路径,但生成的路径是绝对路径,例如

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

但我想要一个只有文件名的相对路径。

有没有办法通过XLST文件解析出文件名?

5 个答案:

答案 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)

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>

注意:没时间测试;但这看起来是正确的。

答案 4 :(得分:0)