这可能是 骆驼或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())
xpath gurus的问题 - 我的xpath中是否遗漏了会削减此值的内容?
骆驼大师的问题 - 也许我可以在评估后修剪这个值?我知道我可以通过另一个步骤传递它,但我认为这将是ns.xpath调用本身支持的常见用例。
我还注意到ns.xpath将头设置为'com.sun.org.apache.xml.internal.dtm.ref.DTMNodeList'的实例,而不是String,这将是期望的类型。
谢谢大家,
罗伊
答案 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) ?