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

标签 java xml xpath apache-camel

我在使用 xpath 使用 apache-camel 提取下面的“有效负载”值时遇到一些问题。我在两个示例 xml 的路由中使用下面的 xpath,第一个示例 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>

我发现了类似的question关于 xml 和 xpath,但它处理 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']/*)

祝你好运。

关于java - 当最外层元素具有 xmlns 属性时,如何在camel中使用xpath?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31434699/

相关文章:

android - 在android中读取xml文件 - 解析

c# - XPath 未按预期工作

c# - 如何选择使用默认命名空间的节点?

java - Jboss EAP6 和 Weblogic 11 XML 响应之间的差异

java - 从周数查找一周的开始结束日期

java - 无法将脚本作为 Jython 运行。但使用 python 没有任何问题

python - 尝试使用 Beautiful Soup 或 ElementTree 从链接的迭代列表中抓取信息

html - 如何在 xpath 中获取选项的值而不是显示值?

java - Webdriver sendkeys() 不起作用。使用 javascript 也失败

java - 表列不会占用 javaFX 中 TableView 的完整大小