путь от строки - PullRequest
       28

путь от строки

1 голос
/ 21 февраля 2011

Я пытаюсь сделать выражение xpath из строкового литерала. Я создаю свой xpath из некоторых переменных, поэтому не могу их предварительно рассчитать. Я получаю что-то вроде этого:

count(concat("//sales:", "$variable", "Available"))

и это приводит к ошибке:

Can not convert #STRING to a NodeList!

Я думаю, что было бы достаточно, если бы я как-то оценил () результат concat, чтобы он стал фактическим NodeList. Есть ли подходящая функция для этого?

Я делаю эту текстовую манипуляцию в Apache Camel, но это не так важно, IMO.

РЕДАКТИРОВАНИЕ:

Если быть более точным: Apache Camel работает как конвейер, XML проходит через него, и вы можете обрабатывать эти XML несколькими способами - например, вводить некоторые правила, основанные на содержимом или структуре XML. Вот почему мне нужно, чтобы это было динамичным.

Моя ситуация выглядит так:

  1. посмотрите на xml и получите содержимое элемента operationName
  2. поиск в каком-либо другом документе элемента, сконструированного из строчной буквы operationName и строкового литерала 'Available'

Итак, если мое имя_операции имеет значение FOOBAR, я хочу проверить наличие узла // sales: foobarAvailable

Ответы [ 2 ]

1 голос
/ 21 февраля 2011

Оценка динамически сгенерированных выражений XPath не поддерживается в XSLT / XPath до версии 3.0 , которые в настоящее время находятся в раннем состоянии WD (рабочий черновик).

Если известно большеЧто касается выражения XPath, то обычно можно найти какое-то решение.

Поэтому, если вы опишите свою проблему более подробно, велика вероятность, что кто-то сможет помочь.

ОБНОВЛЕНИЕ : есть новая информация от OP:

Итак, если мое имя_операции равно FOOBAR, то я хочу проверить наличие узла //sales:foobarAvailable

Это легко сделать:

Использовать :

//sales:*[local-name()
         =
          concat(translate(operationName, $vUpper, $vLower), 'Available')
         ]

, где $ vUpper и $ vLower определены как (можно заменить на):

'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

и

'abcdefghijklmnopqrstuvwxyz'
0 голосов
/ 22 февраля 2011

Если ваш XSLT-процессор не имеет расширения xx :valu (и вы не можете переключиться на такое, которое имеет), тогда другой метод, который может быть полезен в некоторых ситуациях, - это написание мета-таблицы стилей - таблицы стилейкоторый создает или изменяет другую таблицу стилей.Затем вы запускаете эти два в какой-то конвейер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...