0

リクエストで送信された詳細を2つの異なるキューに追加するサービスに取り組んでいます。

このために、ペイロードを乱すことなくXMLの一部を抽出するために使用します。しかし、それは空白を与えています。

私の入力は以下のようになります

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://example.org/HelloService">
   <soapenv:Header/>
   <soapenv:Body>
     <AddRequest>
      <Person>
         <firstName>Test</firstName>
         <lastName>Tesst</lastName>
         <age>23</age>
      </Person>
      <Company>
         <companyName>Test</companyName>
         <state>Tesst</state>
         <zip>12345</zip>
      </Company>
     </AddRequest>
   </soapenv:Body>
</soapenv:Envelope>

そして、Person要素を抽出している私のフローの一部は以下のとおりです。

    <set-variable value="#[xpath://Person]" variableName="person"></set-variable>

    <logger level="INFO" message="#[flowVars['person']]" />     
    ........
    ......

しかし、ロガーはそれを空白として印刷しています

2013-01-30 12:56:08,287 INFO  [HelloService.stage1.02] processor.LoggerMessageProcessor (LoggerMessageProcessor.java:108) - 

xml要素の代わりに空白を抽出している理由。

XPATHを使用してpaylaodから「Person」要素を取得するにはどうすればよいですか?

4

2 に答える 2

4

これを使って:

<set-variable value="#[xpath('//Person')]" variableName="person" />

編集:

<set-variable value="#[xpath('//Person').text]" variableName="person" />

要素がある場合は、要素のテキスト値を返します。

于 2013-01-30T18:18:08.743 に答える
-1

XSLTトランスフォーマーを使用してxml要素を抽出してみてください。

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

<xsl:template match="/">
    <xsl:copy copy-namespaces="no">
        <xsl:apply-templates select="//Person" />                   
    </xsl:copy>     
</xsl:template>

<xsl:template match="@*|node()">
    <xsl:copy copy-namespaces="no">
        <xsl:apply-templates select="@*|node()" />                  
    </xsl:copy>     
</xsl:template>
于 2013-01-30T18:19:44.343 に答える