Обрезка выражения xpath, используемого в маршруте Camel - PullRequest
4 голосов
/ 21 июня 2011

Это может быть или верблюд или вопрос xpath :).Примечание для не верблюжьих людей: верблюд использует javax.xml.xpath для разрешения их xml.

На пути к верблюду я пытаюсь извлечь элемент из тела xml, чтобы использовать его в качестве моего имени файла:

Namespaces ns = getNamespaces();

String fileIDxPath = (see notes);

from("direct:testOutToFile")
    .setHeader(Exchange.FILE_NAME, ns.xpath(fileIDxPath))
    .to("file:/tmp/testing/generatedXML");

Но я не могу получить xpath, который дает мне усеченное значение узла.Вот xpath, который я пробовал:

A) //rm:TradeMsg/rm:Submitter/rm:partyTradeIdentifier/fpml:tradeId/
B) //rm:TradeMsg/rm:Submitter/rm:partyTradeIdentifier/fpml:tradeId/text()
C) //rm:TradeMsg/rm:Submitter/rm:partyTradeIdentifier/fpml:tradeId/text()[normalize-space()]
D) normalize-space(//rm:TradeMsg/rm:Submitter/rm:partyTradeIdentifier/fpml:tradeId/text())
  • A) Возвращает весь узел, а не только значение
  • B) Возвращает значение, но с множеством пробелов
  • C) Также возвращает значение со всеми пробелами
  • D) Выдает XPathExpressionException

Вопрос для гуру xpath - я что-то упустилв моем xpath что бы обрезать это значение?

Вопрос для верблюжьих гуру - может быть, я могу обрезать это значение после его оценки?Я знаю, что мог бы пройти через еще один шаг, но я думаю, что это будет достаточно распространенный вариант использования, который будет поддерживаться в самом вызове ns.xpath.

Я также заметил, что ns.xpath устанавливаетзаголовок экземпляра 'com.sun.org.apache.xml.internal.dtm.ref.DTMNodeList' вместо String, который будет ожидаемым типом.

Спасибо всем,
Рой

Ответы [ 2 ]

2 голосов
/ 23 июня 2011

попробуйте это ... он отлично работает в 2.8-SNAPSHOT

.setHeader(Exchange.FILE_NAME, 
           XPathBuilder.xpath("normalize-space(//rm:TradeMsg/rm:Submitter/rm:partyTradeIdentifier/fpml:tradeId/text()", String.class))
0 голосов
/ 21 июня 2011

Вы пробовали: нормализуют-пространство (// гт: TradeMsg / гт: Отправитель / гт: partyTradeIdentifier / FpML: tradeId)

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