如何从mule

时间:2017-03-02 12:58:32

标签: xml xpath mule

我的要求是捕获从WS使用者收到的有效载荷中的前4个子xml标签。 以下是WS消费者的回复

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

3 个答案:

答案 0 :(得分:1)

在dataweave中使用以下内容。

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

将输出内容保持为application / xml

答案 1 :(得分:1)

您可以使用Mule 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>

它将轻松转换您的输入xml

答案 2 :(得分:0)

您可以这样做:/ root / client [position()&lt; = 4]。