xpath mule mule-studio

xpath - Cómo extraer valores de una lista xml en Mule foreach



mule-studio (3)

Creo que tienes un problema con los espacios de nombres, xmlns se usa para indicar el espacio de nombres raíz de un elemento y sus elementos secundarios, sin embargo, estás usando un xpath usándolo como prefijo, es decir: //xmlns:retrieveDataResponse/xmlns:retrieveAllData'' , que Está Mal. Intente definir el espacio de nombres myNameSpace el URI http://services.test.com/schema/MainData/V1 y luego utilícelo en la función xpath: //myNameSpace:retrieveDataResponse/myNameSpace:retrieveAllData'' .

Además, si utiliza espacios de nombres, es probable que tenga problemas con las funciones de xpath según MULE-6508 , intente también desactivar las inclusiones de los espacios de nombres de las mulas.

Finalmente, si esto es para un desarrollo continuo, pruébelo con el Mule 3.6, que pronto se lanzará, que incluye un soporte mejorado para XML según wiki y jira .

Tengo una respuesta siguiente de SOAP:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <retrieveAllDataResponse xmlns="http://services.test.com/schema/MainData/V1"> <retrieveAllData> <Response>The Data retrieved from the Database</Response> <Id>1231</Id> <Name>test1</Name> <Age>560</Age> <Designation>Software Engineer</Designation> </retrieveAllData> <retrieveAllData> <Response>The Data retrieved from the Database</Response> <Id>165</Id> <Name>test2</Name> <Age>561</Age> <Designation>Senior Software Engineer</Designation> </retrieveAllData> <retrieveAllData> <Response>The Data retrieved from the Database</Response> <Id>134</Id> <Name>test3</Name> <Age>562</Age> <Designation>HR</Designation> </retrieveAllData> </retrieveAllDataResponse> </soap:Body> </soap:Envelope>

Ahora quiero extraer los valores de la lista <retrieveAllData> y ponerlos en variables de flujo bajo foreach : -

<foreach collection="#[xpath(''//xmlns:retrieveDataResponse/xmlns:retrieveAllData'')]" doc:name="For Each"> <set-variable doc:name="Variable" value="#[xpath(''//xmlns:Id/text()'').text]" variableName="id"/> <logger level="INFO" message="#[flowVars[''id'']]" doc:name="Logger"/> <set-variable doc:name="Variable" value="#[xpath(''//xmlns:Name/text()'').text]" variableName="name"/> <logger level="INFO" message="#[flowVars[''name'']]" doc:name="Logger"/> <set-variable doc:name="Variable" value="#[xpath(''//xmlns:Age/text()'').text]" variableName="age"/> <logger level="INFO" message="#[flowVars[''age'']]" doc:name="Logger"/> <set-variable doc:name="Variable" value="#[xpath(''//xmlns:Designation/text()'').text]" variableName="designation"/>

Pero no obtengo los valores en las variables. Obtengo lo siguiente:

Splitter returned no results. If this is not expected, please check your split expression

Tenga en cuenta que ya he configurado el gestor de espacio de nombres XML para el espacio de nombres.

Por favor, avíseme si hay alguna forma mejor de obtener todos los valores de la lista y configurarlos en las variables de flujo.


<flow name="xmlsplitter" doc:name="xmlsplitter"> <file:inbound-endpoint path="C:/var/lib/data" doc:name="File"/> <file:file-to-string-transformer doc:name="File to String"/> <logger level="INFO" message="#[payload:]" doc:name="Logger" /> <foreach collection="#[xpath(''//out:retrieveAllData'')]" doc:name="For Each"> <set-variable doc:name="Variable" value="#[xpath(''out:Designation/text()'').wholeText]" variableName="id"/> <logger level="INFO" message="#[flowVars[''id'']]" doc:name="Logger"/> </foreach> </flow>


Así que la solución de trabajo final está usando el siguiente XPATH y está funcionando para mí: - #[xpath(''out:Designation/text()'').wholeText]