Обрезка выражения xpath, используемого в маршруте Camel

Это может быть вопрос либо на верблюда, либо на 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) Также возвращает значение со всеми пробелами
  • Г) Выдает исключение XPathExpressionException.

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

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

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

Всем спасибо,
Рой


person Roy Truelove    schedule 21.06.2011    source источник


Ответы (2)


попробуй так... в 2.8-SNAPSHOT работает нормально

.setHeader(Exchange.FILE_NAME, 
           XPathBuilder.xpath("normalize-space(//rm:TradeMsg/rm:Submitter/rm:partyTradeIdentifier/fpml:tradeId/text()", String.class))
person Ben ODay    schedule 23.06.2011

Вы пробовали: normalize-space(//rm:TradeMsg/rm:Submitter/rm:partyTradeIdentifier/fpml:tradeId)?

person anthonybruni    schedule 21.06.2011
comment
Спасибо, Энтони, только что попробовал, получил исключение XPathExpressionException, как в случае D. - person Roy Truelove; 21.06.2011