首页 > 解决方案 > 如何在骆驼中获取xml节点数

问题描述

我想使用骆驼交换或骆驼路线中的特定标签获取文件中存在的 xml 节点的计数。

我的xml标签是这样的:

<parent>
  <child>
    <data>A</data>
  </child>
  <child>
    <data>B</data>
  </child>
  <child>
    <data>C</data>
    <child>
       <data>C1</data>
    </child>
    <child>
       <data>C2</data>
    </child>
  </child>
</parent>

我想计算<child>标签,它应该为此返回 5。

目前,我正在使用 Exchange 获取大小,但它的输出为 3。

exchange.getIn().getBody(XmlTreesType.class).getParentTree().getChildNode().size(); 

标签: javaapache-cameldsl

解决方案


这在很大程度上取决于您的实际用例。

要提取计数,您可以使用XPath 语言,它允许您轻松地从 XML 中提取信息。

<child>要提取您的所有节点的计数,<parent>您可以使用以下命令:

count(/parent//child)

XPath 表达式。

要提取此值并将其存储在标头变量中,如下所示:

.from()
  .setHeader("childCountHeader", xpath("count(/parent//child)", Integer.class));

Camel Java DSL 中的另一个典型用例如下所示,以便直接根据计数进行路由:

from()
  .choice().xpath("count(/parent//child)>5")
  //do something
  .otherwise()
  //do something else
  .end();

如果你想在 vanilla java 中使用 XPath,就像在骆驼处理器中一样。您可以按照此答案中的说明构建 XPath 处理器。


推荐阅读