2012-03-12 66 views
0

在下面的代码片段,我试图让我的@imageMeta节点的子串,添加一些路径的位置,并把它作为通过参数来我的Java方法XSLT。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,'/')}'.' 

请帮忙。

回答

2

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

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

+0

这个建议固定语法,但它是不是正确的一个:'/配置/ assets/images'是磁盘路径,而不是源XML中的路径,Dimitre解决方案是合适的 – MiMo 2012-03-13 02:16:03

+0

ohk ..同意... – 2012-03-13 03:39:42

0

婴儿程序员'亚拉文的建议,将解决您解析错误。

您也提到你想小写的资金我。两个选项:

  • 使用XSLT 1.0,这StackOverflow的答案解释如何lower-case the first character of a string。它不适用于'Í'等Unicode字符,但你可能不需要它。
  • XSLT 2.0有lower-case功能,这将降低,如果你的整个字符串,并且可能不是你要找的内容。
3
<xsl:variable name="imagePathFrom" select="/config/assets/images/{substring-after(@imageMeta,'/')}" /> 

有两个问题在这里

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

  2. 即使没有AVT,这将尝试选择所有/config/assets/images节点,但目的是变量必须包含"/config/assets/images"

解决这两个问题

<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' 
+0

谢谢..工作:) – nishMaria 2012-03-15 10:41:18

+0

@nishMaria:I很高兴我的回答对你有用。您能否考虑*接受*(通过点击答案旁边的复选标记)? – 2012-03-15 12:34:31

相关问题