第 376 章 XPath 语言
可作为 Camel 版本 1.1 提供
Camel 支持 XPath,允许在 DSL 或 Xml 配置中使用表达式或 predicates。例如,您可以使用 XPath 在 Message Filter 中创建 Predicate,或作为 Recipient List 的 Expression。
流
				如果消息正文基于流,这意味着它接收的输入将提交至 Camel 作为流。这意味着,您只能 一次 读取流的内容。因此,通常当使用 XPath 作为 消息过滤器 或内容基于内容的路由器时,您需要多次访问数据,并且您应使用流缓存或将消息正文转换为 String,然后再安全地重新读取多次。
			
from("queue:foo").
  filter().xpath("//foo")).
  to("queue:bar")
from("queue:foo").
  filter().xpath("//foo")).
  to("queue:bar")
from("queue:foo").
  choice().xpath("//foo")).to("queue:bar").
  otherwise().to("queue:others");
from("queue:foo").
  choice().xpath("//foo")).to("queue:bar").
  otherwise().to("queue:others");
376.1. XPath 语言选项 复制链接链接已复制到粘贴板!
XPath 语言支持 9 选项,这些选项如下。
| 名称 | 默认 | Java 类型 | 描述 | 
|---|---|---|---|
|   documentType  |   
									  |   文档类型的类名称是 org.w3c.dom.Document  | |
|   resultType  |   
									  |   
									  |   设置结果类型的类名称(输出中的类型)默认结果类型是 NodeSet  | 
|   saxon  |   
									  |   
									  |   是否使用 Saxon。  | 
|   factoryRef  |   
									  |   对 registry 中查询的自定义 XPathFactory 的引用  | |
|   objectModel  |   
									  |   使用的 XPath 对象模型  | |
|   logNamespaces  |   
									  |   
									  |   是否记录命名空间,在拍摄过程中有助于进行  | 
|   headerName  |   
									  |   用作输入的标头名称,而不是消息正文  | |
|   threadSafety  |   
									  |   
									  |   为 xpath 表达式返回的结果启用 thread-safety。这适用于在将 NODESET 用作结果类型时,返回的集合具有多个元素。在这种情况下,如果同时处理 NODESET,比如以并行处理模式从 Camel Splitter EIP 中处理 NODESET,则可能会出现线程安全的问题。这个选项可防止对节点进行防御副本的并发问题。如果您在应用程序中使用 camel-saxon 或 Saxon,则建议启用此选项。Saxon 具有 thread-safety 问题,可以通过打开这个选项来阻止。  | 
|   trim  |   
									  |   
									  |   是否修剪值是否删除前导(尾随空格和换行符)  |