2017-11-02 7 views
1

にXMLリストから特定のXMLノードを抽出し、私は以下のXML要求mulesoft

<root> 
<base> 
<status> 
<type>A</type> 
<set>B</set> 
</status> 
<status> 
<type>A</type> 
<set>B</set> 
</status> 
<status> 
<type>A</type> 
<set>B</set> 
</status> 
</root> 
</base> 

を持っていると私は、XML

<status> 
<type>A</type> 
<set>B</set> 
</status> 
<status> 
<type>A</type> 
<set>B</set> 
</status> 
<status> 
<type>A</type> 
<set>B</set> 
</status> 

上からXMLの下に抽出したい**私はdataweaveを使用したくありません、どのようにXPath式を通して、このロジックを実現し、私はそれに他の方法をやらせることができます

+0

あなたが尋ねる前に解決策を探していましたか?私はないと思う... – Andersson

答えて

2

Plsはあなたの入力XMLが無効であることに注意**、plsは、それが有効にするためにルート&ベースタグを修正

#ソリューション1あなたはここにDataweaveを使用する準備ができではありませんので、あなたは必要に応じてXSLTトランスとXPathを使用して、下記の別のソリューションです: - : -

<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/> 

     <flow name="testFlow"> 
     <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="transform.xsl" maxIdleTransformers="2" maxActiveTransformers="5" doc:name="XSLT" mimeType="application/xml"> 
     </mulexml:xslt-transformer> 
    </flow> 

変換を置きます。 xslの下にsrc/main/resource場所:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes" /> 

    <xsl:template match="/"> 
     <xsl:for-each select="root/base/status"> 
       <status> 
       <type> 
        <xsl:value-of select="type" /> 
       </type> 
       <set> 
        <xsl:value-of select="set" /> 
       </set> 
       </status> 
      </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 
#の対処方法2:フロー内XPath3を使用し、かつfor-each

<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/> 

     <flow name="testFlow"> 
     <http:listener config-ref="HTTP_Listener_Configuration" path="/test" doc:name="HTTP"/> 
      <expression-component doc:name="Expression"> 
     <![CDATA[ 
      StringBuffer sb = new StringBuffer(); 
      flowVars.stBuffer=sb; 
      ]]> 
     </expression-component> 
     <foreach collection="#[xpath3('//root/base/status', message.payload, 'NODESET')]" doc:name="For Each"> 
      <mulexml:dom-to-xml-transformer doc:name="DOM to XML"/> 
      <logger message="#[payload.replace(&quot;&lt;?xml version=\&quot;1.0\&quot; encoding=\&quot;UTF-8\&quot;?&gt;&quot;, &quot;&quot;)]" level="INFO" doc:name="Logger"/> 
      <set-payload value="#[payload.replace(&quot;&lt;?xml version=\&quot;1.0\&quot; encoding=\&quot;UTF-8\&quot;?&gt;&quot;, &quot;&quot;)]" doc:name="Set Payload"/> 
       <set-payload value="#[flowVars.stBuffer.append(message.payload).toString()]" doc:name="Set Payload"/> 
     </foreach> 
     <set-payload value="#[flowVars.stBuffer]" doc:name="Set Payload" mimeType="application/xml"/> 
     <mulexml:dom-to-xml-transformer doc:name="DOM to XML"/> 

    </flow> 

どちらの場合も、以下のように、応答は次のようになります。
enter image description here

+0

あなたの助けに感謝!!両方のソリューションが揺れた!!この正確な出力を与えることができる直接的なxpath関数はありません。ミュールで? – Isranis

関連する問題