修剪Camel路由中使用的xpath表达式

这可能是骆驼或xpath问题:).请注意非骆驼人:camel使用
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 gurus的问题 – 我在xpath中错过了一些可以修剪这个值的东西吗?

骆驼大师的问题 – 也许我可以在评估之后削减这个值?我知道我可以通过另一个步骤传递它,但我认为这将是ns.xpath调用本身支持的常见用例.

我还注意到,ns.xpath将标头设置为’com.sun.org.apache.xml.internal.dtm.ref.DTMNodeList’的实例,而不是String,这将是预期的类型.

谢谢大家,
罗伊

最佳答案 试试这个…它在2.8-SNAPSHOT中工作正常

.setHeader(Exchange.FILE_NAME, 
           XPathBuilder.xpath("normalize-space(//rm:TradeMsg/rm:Submitter/rm:partyTradeIdentifier/fpml:tradeId/text()", String.class))
点赞