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

时间:2011-06-21 19:30:15

标签: xpath apache-camel

这可能是 骆驼或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 个答案:

答案 0 :(得分:2)

试试这个......它在2.8-SNAPSHOT中工作正常

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

答案 1 :(得分:0)

你试过了吗? 正常化空间(// RM:TradeMsg / RM:发布者/ RM:partyTradeIdentifier / FpML的:tradeId) ?