XSLT-获取子字符串并将其作为参数传递给java函数

时间:2012-03-12 10:25:40

标签: xslt

在下面的代码片段中,我试图获取我的@imageMeta节点的子字符串,追加一些路径位置,并通过XSLT将其作为参数传递给我的java方法。

<xsl:variable name="imagePathFrom" select="/config/assets/images/{substring-after(@imageMeta,'/')}" />
<xsl:variable name="imagePathTo" select="'/dev/svn_root/platform/system'" />
<xsl:value-of select="filecopy:copyFile($imagePathFrom, $imagePathTo)"/>

我的@imageMeta节点数据看起来像Images/common/dialog/dialogue_black.png。 我必须将上述路径转换为images/common/dialog/dialogue_black.png(注意资本'I'更改为小'i')并添加更多路径数据。

所以我的最终路径条目应该看起来像“/config/assets/images/common/dialog/dialogue_black.png”。当我运行我的代码片段时,我收到一条错误说明:

line 51: Error parsing XPath expression '/config/assets/images/{substring-after(@imageMeta,'/')}'.' 

请帮忙。

3 个答案:

答案 0 :(得分:3)

<xsl:variable name="imagePathFrom" select="/config/assets/images/{substring-after(@imageMeta,'/')}" />

这里有两个问题

  1. 语法错误 - select可能是XSLT中唯一不能包含AVT的属性属性。

  2. 即使没有AVT,这也会尝试选择所有/config/assets/images个节点,但目的是该变量必须包含字符串 "/config/assets/images"

  3. 解决这两个问题

    <xsl:variable name="imagePathFrom" select=
     "concat('/config/assets/images/', substring-after(@imageMeta,'/')" />
    

    替代解决方案

    <xsl:variable name="imagePathFrom" select=
     "concat('/config/assets/',
             translate(substring(@imageMeta, 1, 1),
                       $vUpper,
                       $vLower
                       ),
             substring(@imageMeta, 2)
             )" />
    

    其中$vLower$vUpper分别定义为:

    'abcdefghijklmnopqrstuvwxyz'
    

    'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    

答案 1 :(得分:2)

您的代码中存在一个问题: <xsl:variable name="imagePathFrom" select="/config/assets/images/{substring-after(@imageMeta,'/')}" />

它假设是.. <xsl:variable name="imagePathFrom" select="substring-after(/config/assets/images/@imageMeta,'/')" />

答案 2 :(得分:0)

婴儿程序员'Aravind'建议将解决您的解析错误。

你还提到你想要降低大写字母i。这里有两个选择:

  • 使用XSLT 1.0,此StackOverflow答案解释了如何lower-case the first character of a string。它不适用于'Í'等Unicode字符,但您可能不需要它。
  • XSLT 2.0具有lower-case功能,可以小写整个字符串,可能不是您要查找的内容。