2017-03-02 27 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。以上代码工作正常。 –