对于最新的稳定版本,请使用 Spring Integration 6.3.1Spring中文文档

对于最新的稳定版本,请使用 Spring Integration 6.3.1Spring中文文档

XPathMessageSplitter支持带有 OR 有效负载的消息。 拆分器使用提供的 XPath 表达式将有效负载拆分为多个节点。 默认情况下,这会导致每个实例都成为新消息的有效负载。 当每条消息应为 时,可以设置标志。 在传入有效负载的情况下,有效负载将进行转换,然后拆分,然后再转换回多条消息。 XPath 拆分器实现,因此应与适当的终结点一起配置(有关更简单的配置替代方法,请参阅以下示例之后的命名空间支持示例)。 以下示例配置一个 Bean,该 Bean 使用 :StringDocumentNodeDocumentcreateDocumentsStringStringMessageHandlerXPathMessageSplitterSpring中文文档

<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 拆分器命名空间支持允许您创建具有输入通道和输出通道的消息端点,如以下示例所示:Spring中文文档

<!-- 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 开始,当请求不是 类型时,会公开实例的(例如 )属性。 下面的示例定义一个属性,并将其与该属性一起使用:XPathMessageSplitteroutputPropertiesOutputKeys.OMIT_XML_DECLARATIONjavax.xml.transform.Transformerpayloadorg.w3c.dom.Nodeoutput-propertiesSpring中文文档

<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>

从 开始,将一个选项公开为标志(默认为 )。 这允许在下游流中对拆分节点进行“流式处理”。 当模式设置为 时,每个节点都会在迭代时进行转换。 当 时,在拆分节点开始发送到输出通道之前,首先转换所有条目。 (您可以将区别视为“转换、发送、转换、发送”与“转换、转换、发送、发送”。 有关详细信息,请参阅拆分器version 4.2XPathMessageSplitteriteratorbooleantrueiteratortruefalseSpring中文文档