这可能是骆驼或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))