Это может быть вопрос либо на верблюда, либо на 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, что было бы ожидаемым типом.
Всем спасибо,
Рой