2014-12-31 3 views
0

I 후속 SOAP 응답을 가지고있다 -뮬 foreach 문에서 XML 목록에서 값을 추출하는 방법

<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> 

지금은 목록 <retrieveAllData>에서 값을 추출하고 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"/> 

하지만 변수에 값을 받고 있지 않다 .. 나는 점점 오전 다음 -

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

에서 모든 값을 얻을 수있는 더 좋은 방법이 알려주세요 .. 이미 네임 스페이스에 대한 네임 스페이스 관리자XML을 설정 한 점에 유의하시기 바랍니다 목록 및 흐름 변수에 그것을 설정?

답변

1

<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> 
0

나는, 그러나 당신이 접두사로 사용하는 XPath를 사용하고, xmlns는 요소와 어린이의 루트 네임 스페이스를 표시하는 데 사용됩니다, 당신은 네임 스페이스에 문제가 생각 즉 : //xmlns:retrieveDataResponse/xmlns:retrieveAllData'입니다. 네임 스페이스 myNameSpace를 URI http://services.test.com/schema/MainData/V1으로 정의한 다음 xpath fuction : //myNameSpace:retrieveDataResponse/myNameSpace:retrieveAllData'에서 사용하십시오.

네임 스페이스를 사용하는 경우 MULE-6508에 따라 xpath 함수에 문제가있을 가능성이 높으므로 뮬 네임 스페이스의 포함을 사용하지 않도록 설정하는 방법도 시도해보십시오.

마지막으로 이것이 진행중인 개발이라면, wikijira에 따라 XML에 대한 지원이 훨씬 개선 된 곧 출시 될 Mule 3.6을 사용해보십시오.

+0

안녕 빅터는 ... 당신의 응답을 주셔서 감사합니다 ... 문제는 오히려 내가 찾은 .. 네임 스페이스로하지 않았다 변수 이름 = "변수"값 = "# [xpath ('out : 지정/텍스트()'). 전체 텍스트]"variableName = "id"/> "변수 이름 ="변수 "값 ="# [xpath ('지정 :/텍스트()') 텍스트] "variableName ="id "/>'작동하지 않습니다. 이 ** wholeText **의 xpath ..하지만 나는 왜 그런지 모르겠다. –

0

그래서 최종 작업 솔루션은 다음 XPATH를 사용하고 나를 위해 노력하고 있습니다 : - #[xpath('out:Designation/text()').wholeText]