问题描述
|
这可能是骆驼或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.8-快照中工作正常
.setHeader(Exchange.FILE_NAME,XPathBuilder.xpath(\"normalize-space(//rm:TradeMsg/rm:Submitter/rm:partyTradeIdentifier/fpml:tradeId/text()\",String.class))
, 你有没有尝试过:
normalize-space(// rm:TradeMsg / rm:Submitter / rm:partyTradeIdentifier / fpml:tradeId)
?