【问题标题】:How to extract values from an xml list in Mule foreach如何从 Mule foreach 中的 xml 列表中提取值
【发布时间】:2015-02-27 18:56:06
【问题描述】:

我有以下 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>

现在我想从列表&lt;retrieveAllData&gt; 中提取值并放入 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 命名空间管理器 ..

请告诉我有没有更好的方法从列表中获取所有值并将其设置到流变量中?

【问题讨论】:

    标签: xpath mule mule-studio


    【解决方案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>
    

    【讨论】:

      【解决方案2】:

      我相信您的命名空间有问题,xmlns 用于指示元素及其子元素的根命名空间,但是您使用的 xpath 使用它作为前缀,即://xmlns:retrieveDataResponse/xmlns:retrieveAllData',这是错误的.尝试将命名空间 myNameSpace 定义为 URI http://services.test.com/schema/MainData/V1,然后在 xpath 函数中使用它://myNameSpace:retrieveDataResponse/myNameSpace:retrieveAllData'

      此外,如果您使用命名空间,您可能会遇到与 MULE-6508 相关的 xpath 函数问题,也请尝试禁用包含 mule 命名空间的解决方法。

      最后,如果这是为了正在进行的开发,请尝试即将发布的 Mule 3.6,其中包括根据 wikijira 大大改进的 XML 支持。

      【讨论】:

      • 嗨维克多...谢谢您的回复...问题不在于命名空间..我觉得很奇怪,因为&lt;set-variable doc:name="Variable" value="#[xpath('out:Designation/text()').wholeText]" variableName="id"/&gt; 工作正常而&lt;set-variable doc:name="Variable" value="#[xpath('out:Designation/text()').text]" variableName="id"/&gt; 不工作...可能是因为 xpath 中的这个 wholeText .. 但我不知道为什么
      【解决方案3】:

      所以最终的工作解决方案是使用以下 XPATH 并为我工作:- #[xpath('out:Designation/text()').wholeText]

      【讨论】:

        猜你喜欢
        • 2015-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多