如何在mule中从xml中选择前4个子标记

如何在mule中从xml中选择前4个子标记,xml,xpath,mule,Xml,Xpath,Mule,我的需求是捕获负载中从WS-consumer接收的前4个子xml标记。 下面是WS-consumer的响应 <root> <client> <name>abc<name> <status>success</status> </client> <client> <name>def<name> <status>success</sta

我的需求是捕获负载中从WS-consumer接收的前4个子xml标记。 下面是WS-consumer的响应

<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>

abc
成功
def
成功
ghi
成功
jkl
失败
mno
成功
......
......
......
现在,我必须只选择根标记下有效负载中的前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>

abc
成功
def
成功
ghi
成功
jkl
失败

您可以这样做:/root/client[position()您可以这样做:/root/client[position()在dataweave中使用以下命令

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

将输出内容保持为application/xml

在dataweave中使用以下内容

root: payload.root.*client[0..3]
将输出内容保持为application/xml

您可以使用Mule transformer,并以如下简单方式进行操作:-

   <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: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>
它将轻松转换您的输入xml

您可以使用Mule transformer,并以如下简单方式进行转换:-

   <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: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>
它将轻松地转换您的输入xml

//client[position()
//client[position())