当最外层元素具有 xmlns 属性时,如何在骆驼中使用 xpath?
How to use xpath in camel when the outermost element has an xmlns attribute?
我在使用 xpath 使用 apache-camel 提取下面的 "Payload" 值时遇到了一些问题。我在我的路由中为两个示例 xml、第一个示例 xml returns SomeElement 和 SomeOtherElement 按预期使用了下面的 xpath,但第二个 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# 而不是 camel 解决方案。
知道如何使用 apache-camel 解决这个问题吗?
你的第二个例子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']/*)
祝你好运。
我在使用 xpath 使用 apache-camel 提取下面的 "Payload" 值时遇到了一些问题。我在我的路由中为两个示例 xml、第一个示例 xml returns SomeElement 和 SomeOtherElement 按预期使用了下面的 xpath,但第二个 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# 而不是 camel 解决方案。
知道如何使用 apache-camel 解决这个问题吗?
你的第二个例子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']/*)
祝你好运。