nam*_*olk 0 xml xpath wso2 wso2esb
我正在使用Enrich Mediator丰富的XML.
我的问题是,它总是适用于第一个元素,虽然我想将它应用于多个元素.如何将其应用于XPATH选择的所有元素?
我也试过下面的选项.但失败了.
//Response/ResponseDetails/SearchHotelPriceResponse/HotelDetails/Hotel[@HasExtraInfo="true"]
Run Code Online (Sandbox Code Playgroud)
丰富配置:
<enrich>
<source type="inline">
<ImageCode xmlns="">IMG10004</ImageCode>
</source>
<target action="child" xpath="//Response/ResponseDetails/SearchHotelPriceResponse/HotelDetails/Hotel[*]"/>
</enrich>
Run Code Online (Sandbox Code Playgroud)
XML有效负载:
<Response ResponseReference="REF_D_028_749-2801486459143247">
<ResponseDetails Language="en">
<SearchHotelPriceResponse>
<HotelDetails>
<Hotel HasExtraInfo="true" HasMap="true" HasPictures="true">
<City Code="LON">London</City>
<Item Code="ALE1">ALEXANDRA</Item>
<StarRating>3</StarRating>
<HotelRooms>
<HotelRoom Code="SB" NumberOfRooms="1"/>
</HotelRooms>
</Hotel>
<Hotel HasExtraInfo="true" HasPictures="true">
<City Code="LON">London</City>
<Item Code="ALO">Aloft London Excel</Item>
<StarRating>4</StarRating>
<HotelRooms>
<HotelRoom Code="SB" NumberOfRooms="1"/>
</HotelRooms>
</Hotel>
<Hotel HasExtraInfo="true" HasMap="true" HasPictures="true">
<City Code="LON">London</City>
<Item Code="AMB3">Ambassadors Bloomsbury</Item>
<StarRating>4</StarRating>
<HotelRooms>
<HotelRoom Code="SB" NumberOfRooms="1"/>
</HotelRooms>
</Hotel>
</HotelDetails>
</SearchHotelPriceResponse>
</ResponseDetails>
</Response>
Run Code Online (Sandbox Code Playgroud)
使用"iterate"mediator with aggregate for proccess all elements.请检查我的解决方案.
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="EnrichProxy"
startOnLoad="true"
statistics="disable"
trace="disable"
transports="http,https">
<target>
<inSequence>
<payloadFactory media-type="xml">
<format>
<Response xmlns="" ResponseReference="REF_D_028_749-2801486459143247">
<ResponseDetails Language="en">
<SearchHotelPriceResponse>
<HotelDetails>
<Hotel HasExtraInfo="false" HasMap="true" HasPictures="true">
<City Code="LON">London</City>
<Item Code="ALE1">ALEXANDRA</Item>
<StarRating>3</StarRating>
<HotelRooms>
<HotelRoom Code="SB" NumberOfRooms="1"/>
</HotelRooms>
</Hotel>
<Hotel HasExtraInfo="true" HasPictures="true">
<City Code="LON">London</City>
<Item Code="ALO">Aloft London Excel</Item>
<StarRating>4</StarRating>
<HotelRooms>
<HotelRoom Code="SB" NumberOfRooms="1"/>
</HotelRooms>
</Hotel>
<Hotel HasExtraInfo="true" HasMap="true" HasPictures="true">
<City Code="LON">London</City>
<Item Code="AMB3">Ambassadors Bloomsbury</Item>
<StarRating>4</StarRating>
<HotelRooms>
<HotelRoom Code="SB" NumberOfRooms="1"/>
</HotelRooms>
</Hotel>
</HotelDetails>
</SearchHotelPriceResponse>
</ResponseDetails>
</Response>
</format>
<args/>
</payloadFactory>
<property expression="$body" name="bodyBackup" type="OM"/>
<iterate expression="$body//Response/ResponseDetails/SearchHotelPriceResponse/HotelDetails/Hotel"
id="Hotels">
<target>
<sequence>
<filter regex="true()" source="$body//Hotel/@HasExtraInfo">
<then>
<enrich>
<source clone="true" type="inline">
<ImageCode xmlns="">IMG10004</ImageCode>
</source>
<target action="child" xpath="$body//Hotel"/>
</enrich>
</then>
<else/>
</filter>
<loopback/>
</sequence>
</target>
</iterate>
</inSequence>
<outSequence>
<property name="HotelDetails" scope="default">
<HotelDetails xmlns=""/>
</property>
<aggregate id="Hotels">
<completeCondition>
<messageCount max="-1" min="-1"/>
</completeCondition>
<onComplete enclosingElementProperty="HotelDetails" expression="$body/*[1]">
<enrich>
<source clone="true" xpath="$body/*[1]"/>
<target xpath="$ctx:bodyBackup//Response/ResponseDetails/SearchHotelPriceResponse/HotelDetails"/>
</enrich>
<enrich>
<source clone="true" xpath="$ctx:bodyBackup/*[1]"/>
<target type="body"/>
</enrich>
<send/>
</onComplete>
</aggregate>
</outSequence>
</target>
<description/>
</proxy>
Run Code Online (Sandbox Code Playgroud)
对于这个解决方案,这就是结果
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<Response ResponseReference="REF_D_028_749-2801486459143247">
<ResponseDetails Language="en">
<SearchHotelPriceResponse>
<HotelDetails>
<Hotel HasExtraInfo="false" HasMap="true" HasPictures="true">
<City Code="LON">London</City>
<Item Code="ALE1">ALEXANDRA</Item>
<StarRating>3</StarRating>
<HotelRooms>
<HotelRoom Code="SB" NumberOfRooms="1"/>
</HotelRooms>
</Hotel>
<Hotel HasExtraInfo="true" HasPictures="true">
<City Code="LON">London</City>
<Item Code="ALO">Aloft London Excel</Item>
<StarRating>4</StarRating>
<HotelRooms>
<HotelRoom Code="SB" NumberOfRooms="1"/>
</HotelRooms>
<ImageCode>IMG10004</ImageCode>
</Hotel>
<Hotel HasExtraInfo="true" HasMap="true" HasPictures="true">
<City Code="LON">London</City>
<Item Code="AMB3">Ambassadors Bloomsbury</Item>
<StarRating>4</StarRating>
<HotelRooms>
<HotelRoom Code="SB" NumberOfRooms="1"/>
</HotelRooms>
<ImageCode>IMG10004</ImageCode>
</Hotel>
</HotelDetails>
</SearchHotelPriceResponse>
</ResponseDetails>
</Response>
</soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
422 次 |
| 最近记录: |