我的要求是捕获从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>
答案 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() <= 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]。