当最外层元素具有xmlns属性时,如何在camel中使用xpath?

时间:2015-07-15 15:28:40

标签: java xml xpath apache-camel

我在使用xpath使用apache-camel提取下面的“Payload”值时遇到了一些麻烦。我在路由中使用下面的xpath作为示例xml,第一个示例xml按预期返回SomeElement和SomeOtherElement,但第二个xml似乎无法解析xml。

xpath("//Payload/*")

这个例子xml解析得很好。

<Message>
  <Payload>
    <SomeElement />
    <SomeOtherElement />
  </Payload>
</Message>

此示例xml不解析。

<Message xmlns="http://www.fake.com/Message/1">
  <Payload>
    <SomeElement />
    <SomeOtherElement />
  </Payload>
</Message>

我发现了一个关于xml和xpath的类似question,但是它处理的是C#并且不是骆驼解决方案。

知道如何使用apache-camel解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

您的第二个示例xml,指定default namespace: xmlns =“http://www.fake.com/Message/1”,因此您的xpath表达式将不匹配,因为它指定没有命名空间。

有关如何指定命名空间的信息,请参阅http://camel.apache.org/xpath.html#XPath-Namespaces

你需要像

这样的东西
Namespaces ns = new Namespaces("fk", "http://www.fake.com/Message/1");

xpath("//fk:Payload/*", ns)

我不熟悉Apache-Camel,这只是一些快速谷歌搜索的结果。

另一种方法是将xPath更改为

xpath("//*[local-name()='Payload']/*)
祝你好运。