2017-03-02 26 views
0

我的要求是捕獲從WS消費者接收到的有效負載中的前4個子xml標籤。 下面是WS消費者的響應如何從騾的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

'// client [position()<= 4]' – SomeDude

回答

1

在dataweave中使用以下內容。

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

保持輸出內容按application/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> 

它w生病變換輕鬆你的輸入xml

+0

謝謝Anirban。以上代碼工作正常。 –