7

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

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

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

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

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

4

5 回答 5

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 中需要的大多数应用程序来说已经足够了。

于 2009-10-14T23:30:24.323 回答
2

这有点超出了问题的范围,但Michael Kay 有一篇关于使用 XSLT 2 将纯文本解析为 XML 的优秀论文。

于 2009-10-15T02:28:50.283 回答
2

是的,请参阅在 XSLT 2.0 中实现的通用 LR(1) 解析器。(仅 245 行)。

我已经用它实现了一个 JSON解析器和一个 XPath 2.0 解析器——完全在 XSLT 中。

于 2009-10-16T13:14:55.517 回答
0

有可能的。我开发了以下脚本: http ://barsand.wordpress.com/2012/06/19/can-an-xslt-parse-a-string-of-text/

于 2013-07-13T16:48:07.063 回答
0

XSLT 借助 XPath 2.0 及其各种字符串函数帮助它处理这类事情。

示例:
假设有问题提到的路径 [到 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>

注:没来得及测试;但这看起来是对的。

于 2009-10-14T23:17:18.243 回答