1

choiceMule 3.3 フローで、以下に示す要素のスニペットを使用しています。XSL Transformer選択要素をフィードします。XSL Transformer は (エンティティの名前) を返すことになってStringおり、文字列値に基づいて、選択ルーターを使用してそれを別の jms キューにプッシュします。

<flow name="ProcessOrder">
    .
    .  
    <xm:xslt-transformer xsl-file="xsl/getEntity.xslt" returnClass="java.lang.String"/>
    <choice>
        <when expression="payload.contains('ABC')">             
            <jms:outbound-endpoint queue="order.queue1" />
        </when>
        <when>
        </when>
        <otherwise>         
        </otherwise>
    </choice>
</flow>

XSL Transformer はこのペイロードを返します <?xml version="1.0" encoding="UTF-8"?>ABC

String私の質問は、返されたものをどのように比較するかです。payload.contains()これが私の目的を解決し、一致するエンティティが返されることはありませんが、これが最善の方法だとは思いませんABCxyが、それでもこれは完全な証明ソリューションではありません。

4

3 に答える 3

1

以下に示すように、xslt に omit-xml-declaration 部分を追加します。これにより、プロローグのない生の文字列が得られます。

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"    >

<xsl:output omit-xml-declaration="yes" indent="yes" />

<xsl:template match="/">
...
...

これにより、

"ABC" as output instead of     "<?xml version="1.0" encoding="UTF-8"?>ABC"

次に、式で次のように使用します

<when expression="#[message.payload.contains('ABC')]">

このように動作するはずです。

于 2013-01-29T15:48:19.560 に答える
0

MuleのWebサイトでは、expression-splitter-routerevaluatorの使用を提案しています。これは、MuleのWebサイトからの使用方法の例です。

リンゴ、オレンジ、バナナ2本が入ったFruitBowl。Muleがこのオブジェクトを受け取ったら、フルーツをさまざまな場所(AppleService、BananaService、OrangeService)にルーティングします。

<service name="Distributor">
    <inbound>
       <jms:inbound-endpoint queue="distributor.queue"/>
    </inbound>
    <outbound>
        <!-- FruitBowl.getFruit() List -->
        <expression-splitter-router evaluator="bean" expression="fruit">
            <vm:outbound-endpoint path="apple.service.queue">
                <payload-type-filter expectedType="org.mule.tck.testmodels.fruit.Apple"/>
            </vm:outbound-endpoint>
            <vm:outbound-endpoint path="banana.service.queue">
                <payload-type-filter expectedType="org.mule.tck.testmodels.fruit.Banana"/>
            </vm:outbound-endpoint>
            <vm:outbound-endpoint path="orange.service.queue">
                <payload-type-filter expectedType="org.mule.tck.testmodels.fruit.Orange"/>
            </vm:outbound-endpoint>
        </expression-splitter-router>
    </outbound>
</service>

お役に立てば幸い

于 2013-01-29T15:49:23.293 に答える
0

多分これはあなたが探しているものです:

<when evaluator="xpath" expression="/result/" ...

明らかに、XSLT は整形式の XML ドキュメントを返し、目的の結果を XPath から適切にアクセスできる XML 要素として返す必要があります。

于 2013-01-29T15:37:58.270 に答える