如何在mule中从xml中选择前4个子标记
我的需求是捕获负载中从WS-consumer接收的前4个子xml标记。 下面是WS-consumer的响应如何在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
<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() <= 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() <= 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())