带节点列表的ApacheCamel XPath

带节点列表的ApacheCamel XPath,xpath,apache-camel,Xpath,Apache Camel,我想连接来自ApacheCamelXPath结果的所有值,并将其添加到消息上下文中。标题应如下所示:“|value1 | value2 | valueN |” 我的路线看起来像: from("direct:test") .setHeader("key").xpath("//Identifier", List.class) .to("mock:result") 最好的方法是什么?有没有办法实现自己的结果类型?正如Wi

我想连接来自ApacheCamelXPath结果的所有值,并将其添加到消息上下文中。标题应如下所示:
“|value1 | value2 | valueN |”

我的路线看起来像:

from("direct:test")
.setHeader("key").xpath("//Identifier", List.class)
.to("mock:result")

最好的方法是什么?有没有办法实现自己的结果类型?

正如Willem所说,您必须编写自己的处理器

对于这样一件小事,我最喜欢的方法是在包含路由定义的类中声明一个函数,返回一个匿名处理器,如下所示:

private Processor setHeaderWithIdentifiers() {
    return exchange -> {
        List<String> identifiers = new ArrayList<>();
        NodeList nodes = XPathBuilder.xpath("//Identifier").evaluate(exchange,  NodeList.class);

        for (int i = 0; i < nodes.getLength(); i++) {
            identifiers.add(nodes.item(i).getNodeValue());
        }

        // StringUtils from Apache Commons 3 
        String idAsString = StringUtils.join(identifiers, "|");
        exchange.getIn().setHeader("key", idAsString);
    };
}
专用处理器setHeaderWithiIdentifiers(){
返回交换->{
列表标识符=新的ArrayList();
NodeList nodes=XPathBuilder.xpath(“//标识符”).evaluate(exchange,NodeList.class);
对于(int i=0;i

这样,您就不需要找到任何复杂的XPath函数,只要处理器代码仍然很短,代码就仍然清晰易懂。

您可以自己编写一个程序来进行转换。我想知道xquery是否可以做到这一点,因为它比XPath具有更强的转换能力。虽然你也可以分两步来做。首先使用xpath获取节点列表,然后使用另一个xpath以|作为分隔符附加元素,例如使用模板语言或JavaBean或其他方法。