XPathMessageSplitter
支持具有 OR 负载的消息。
拆分器使用提供的 XPath 表达式将负载拆分为多个节点。
默认情况下,这会导致每个实例都成为新消息的有效负载。
当每条消息都应该为 时,您可以设置标志。
在传入有效负载的情况下,有效负载将被转换,然后被拆分,然后再转换回多个消息。
XPath 拆分器实现,因此应与适当的端点一起配置(有关更简单的配置替代方案,请参阅以下示例后面的命名空间支持示例)。
以下示例配置一个 bean,该 bean 使用 :String
Document
Node
Document
createDocuments
String
String
MessageHandler
XPathMessageSplitter
<bean id="splittingEndpoint"
class="org.springframework.integration.endpoint.EventDrivenConsumer">
<constructor-arg ref="orderChannel" />
<constructor-arg>
<bean class="org.springframework.integration.xml.splitter.XPathMessageSplitter">
<constructor-arg value="/order/items" />
<property name="documentBuilder" ref="customisedDocumentBuilder" />
<property name="outputChannel" ref="orderItemsChannel" />
</bean>
</constructor-arg>
</bean>
XPath splitter 命名空间支持允许您创建具有 input 通道和 output 通道的消息端点,如下例所示:
<!-- Split the order into items and create a new message for each item node -->
<int-xml:xpath-splitter id="orderItemSplitter"
input-channel="orderChannel"
output-channel="orderItemsChannel">
<int-xml:xpath-expression expression="/order/items"/>
</int-xml:xpath-splitter>
<!-- Split the order into items, create a new document for each item-->
<int-xml:xpath-splitter id="orderItemDocumentSplitter"
input-channel="orderChannel"
output-channel="orderItemsChannel"
create-documents="true">
<int-xml:xpath-expression expression="/order/items"/>
<int:poller fixed-rate="2000"/>
</int-xml:xpath-splitter>
从版本 4.2 开始,当请求不是 type 时,会公开实例的(例如 )属性。
以下示例定义一个属性并将其与该属性一起使用:XPathMessageSplitter
outputProperties
OutputKeys.OMIT_XML_DECLARATION
javax.xml.transform.Transformer
payload
org.w3c.dom.Node
output-properties
<util:properties id="outputProperties">
<beans:prop key="#{T (javax.xml.transform.OutputKeys).OMIT_XML_DECLARATION}">yes</beans:prop>
</util:properties>
<xpath-splitter input-channel="input"
output-properties="outputProperties">
<xpath-expression expression="/orders/order"/>
</xpath-splitter>
从 开始,将选项公开为标志(默认为 )。
这允许在下游流中 “流式处理” 拆分节点。
将 mode 设置为 后,每个节点在迭代时都会变换。
When ,在开始将拆分节点发送到输出通道之前,首先转换所有条目。
(您可以将差异视为“转换、发送、转换、发送”与“转换、转换、发送、发送”。
有关更多信息,请参阅 Splitter 。version 4.2
XPathMessageSplitter
iterator
boolean
true
iterator
true
false