【问题标题】:How to select first 4 child tags from xml in mule如何从 mule 中的 xml 中选择前 4 个子标签
【发布时间】:2017-03-03 03:49:56
【问题描述】:

我的要求是捕获从 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>

【问题讨论】:

  • //client[position()&lt;=4]

标签: xml xpath mule


【解决方案1】:

在 dataweave 中使用以下内容。

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

保持输出内容为application/xml

【讨论】:

    【解决方案2】:

    你可以使用Mule XSLTtransformer,简单的方法如下:-

       <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

    【讨论】:

      【解决方案3】:

      您也可以这样做:/root/client[position()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-22
        • 1970-01-01
        • 2020-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-29
        相关资源
        最近更新 更多