如何使用camel中的xpath从正文中的xml提取值

如何使用camel中的xpath从正文中的xml提取值,xpath,apache-camel,xmlstarlet,xmllint,xidel,Xpath,Apache Camel,Xmlstarlet,Xmllint,Xidel,我在exchange正文中设置了http响应。我必须从xml中提取一些值。我发现最好的方法是使用camelxpath。我必须从根标记级别提取值。例如,在下面的xml中,我要提取的值是attribute1 <rootTag attribute1="value1"> <child1/> </rootTag> 我看到了一些使用名称空间的示例。但我认为我没有在这里使用名称空间的范围。如果是的话,我该怎么做呢。我不能直接从exchange主体中提取它吗?这是您需要

我在exchange正文中设置了http响应。我必须从xml中提取一些值。我发现最好的方法是使用camelxpath。我必须从根标记级别提取值。例如,在下面的xml中,我要提取的值是attribute1

<rootTag attribute1="value1">
<child1/>
</rootTag>


我看到了一些使用名称空间的示例。但我认为我没有在这里使用名称空间的范围。如果是的话,我该怎么做呢。我不能直接从exchange主体中提取它吗?这是您需要的Xpath:

string(/rootTag/@attribute1)
壳中试验 : : : 输出:
您可以将属性提取到消息头:

.setHeader("MyHeader").xpath("/rootTag/@attribute1", String.class)
或将属性放置到主体:

.setBody().xpath("/rootTag/@attribute1", String.class)
此处不需要名称空间


对于xpath表达式,@Gilles Quenot肯定是正确的。

我一直在尝试用jsonpath做同样的事情。这里我们使用xpath从xml中提取数据。我们可以使用jsonpath做同样的事情吗..或者我可以通过其他方式获取json中的值并将其设置为header/body/property等吗?是的@Susanna M,您可以:
.setHeader(“City”).jsonpath($.City),true)
$ xidel -se '/rootTag/@attribute1' file
value1
.setHeader("MyHeader").xpath("/rootTag/@attribute1", String.class)
.setBody().xpath("/rootTag/@attribute1", String.class)