2017-03-02 8 views
0

私の要件は、WSコンシューマーから受け取った最初の4つの子XMLタグをペイロードに取り込むことです。以下 はWSの消費者muleのxmlから最初の4つの子タグを選択する方法

<root> 
<client> 
    <name>abc<name> 
    <status>success</status> 
</client> 
<client> 
    <name>def<name> 
    <status>success</status> 
</client> 
<client> 
    <name>ghi<name> 
    <status>success</status> 
</client> 
<client> 
    <name>jkl<name> 
    <status>failed</status> 
</client> 
<client> 
    <name>mno<name> 
    <status>success</status> 
</client> 
...... 
...... 
...... 
</root> 

からの応答である今私は、ルートタグの下ペイロードにのみ最初の4子タグを選択する必要があります。

以下のようになります。

<root> 
<client> 
    <name>abc<name> 
    <status>success</status> 
</client> 
<client> 
    <name>def<name> 
    <status>success</status> 
</client> 
<client> 
    <name>ghi<name> 
    <status>success</status> 
</client> 
<client> 
    <name>jkl<name> 
    <status>failed</status> 
</client> 
</root> 
+0

'//クライアント[位置()<= 4] – SomeDude

答えて

1

データウェーブで次を使用してください。

root: payload.root.*client[0..3] 

アプリケーション/ XMLとして出力内容を保管してください

+0

うまく働いた。ありがとうAbhay :) –

0

このようにすることもできます。/ root/client [position()< = 4]

1

次のように、ミュールXSLT変圧器を使用し、簡単な方法でそれを行うことができます: -

<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/> 
    <flow name="testxmlFlow"> 
     <http:listener config-ref="HTTP_Listener_Configuration" path="/test" doc:name="HTTP"/> 
     <mulexml:dom-to-xml-transformer doc:name="DOM to XML"/> 
     <logger message="input xml:- #[payload]" level="INFO" doc:name="Logger"/> 
     <mulexml:xslt-transformer xsl-file="response.xsl" maxIdleTransformers="2" maxActiveTransformers="5" doc:name="XSLT" mimeType="application/xml"> 
     </mulexml:xslt-transformer> 
    </flow> 

とあなたのXSLファイル response.xslになります -

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" 
     indent="yes" /> 

    <xsl:template match="/"> 
     <root> 
      <xsl:for-each select="//client[position() &lt;= 4]"> 
      <client> 
       <name> 
        <xsl:value-of select="name" /> 
       </name> 
       <status> 
        <xsl:value-of select="status" /> 
       </status> 
       </client> 
      </xsl:for-each> 
      </root> 
     </xsl:template> 
    </xsl:stylesheet> 

It wあなたの入力XMLを簡単に変換する

+0

ありがとうAnirban。上記のコードは正常に動作しています。 –

関連する問題