在下面的代码片段中,我试图获取我的@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,'/')}'.'
请帮忙。
答案 0 :(得分:3)
<xsl:variable name="imagePathFrom" select="/config/assets/images/{substring-after(@imageMeta,'/')}" />
这里有两个问题:
语法错误 - select
可能是XSLT中唯一不能包含AVT的属性属性。
即使没有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'
答案 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。这里有两个选择:
lower-case
功能,可以小写整个字符串,可能不是您要查找的内容。