XSLT - получить подстроку и передать ее в качестве параметров в функцию Java - PullRequest
0 голосов
/ 12 марта 2012

В приведенном ниже фрагменте кода я пытаюсь получить подстроку моего узла @imageMeta, добавить еще несколько путей и передать его в качестве параметра моему методу java через XSLT.

<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)"/>

My@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 ]

3 голосов
/ 12 марта 2012
<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'
2 голосов
/ 12 марта 2012

В вашем коде есть одна проблема: <xsl:variable name="imagePathFrom" select="/config/assets/images/{substring-after(@imageMeta,'/')}" />

Это должно быть .. <xsl:variable name="imagePathFrom" select="substring-after(/config/assets/images/@imageMeta,'/')" />

0 голосов
/ 12 марта 2012
Предложение

программиста для младенцев 'Aravind' решит вашу ошибку разбора.

Вы также упомянули, что хотите использовать строчные буквы i. Два варианта здесь:

  • Используя XSLT 1.0, этот ответ StackOverflow объясняет, как в нижнем регистре первый символ строки . Это не будет работать для символов Юникода, таких как 'Í', но вам, вероятно, это не нужно.
  • XSLT 2.0 имеет функцию lower-case, которая будет писать строчную букву всей строки в нижнем регистре и может не соответствовать вашим запросам.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...