Tôi đang sử dụng cURL để gửi một yêu cầu đến một dịch vụ SOAP, tôi gửi trong POST Body XML chứa các thông số, để đáp ứng tôi nhận được:chuyển đổi XML response SOAP đến một đối tượng PHP hoặc mảng
dịch vụ Web: http://lcbtestxmlv2.ivector.co.uk/soap/book.asmx?WSDL
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<SearchResponse xmlns="http://ivectorbookingxml/">
<SearchResult>
<ReturnStatus>
<Success>true</Success>
<Exception />
</ReturnStatus>
<SearchURL>http://www.lowcostholidays.fr/dl.aspx?p=0,8,5,0&date=10/05/2013&duration=15&room1=2,1,0_5&regionid=9</SearchURL>
<PropertyResults>
<PropertyResult>
<TotalProperties>215</TotalProperties>
<PropertyID>1795</PropertyID>
<PropertyName>Hotel Gaddis</PropertyName>
<Rating>3.0</Rating>
<Country>Egypte</Country>
<Resort>Louxor</Resort>
<Strapline>Cet établissement confortable propose un très bon service à un bon rapport qualité-prix. Cet hôtel de 6 étages compte 55 chambres et comprend une terrasse, une réception avec coffre-fort et ascenseur,</Strapline>
<Description>Cet établissement confortable propose un très bon service à un bon rapport qualité-prix. Cet hôtel de 6 étages compte 55 chambres et comprend une terrasse, une réception avec coffre-fort et ascenseur,...</Description>
<CMSBaseURL>http://lcbtestxml1.ivector.co.uk/content/DataObjects/Property/Image/</CMSBaseURL>
<MainImage>image_1795_v1.jpg</MainImage>
<MainImageThumbnail>imagethumb_1795_v1.jpg</MainImageThumbnail>
<SearchURL>http://www.lowcostholidays.fr/dl.aspx?p=0,8,5,0&date=10/05/2013&duration=15&room1=2,1,0_5&regionid=9&propertyid=1795</SearchURL>
<RoomTypes>
<RoomType>
<Seq>1</Seq>
<PropertyRoomTypeID>690039000</PropertyRoomTypeID>
<MealBasisID>3</MealBasisID>
<RoomType>Twin/double Room</RoomType>
<RoomView />
<MealBasis>Petit Déjeuner</MealBasis>
<NonRefundableRates>false</NonRefundableRates>
<SubTotal>150.58</SubTotal>
<Discount>0</Discount>
<Total>150.58</Total>
<Adults>2</Adults>
<Children>1</Children>
<Infants>0</Infants>
<Errata />
</RoomType>
<RoomType>
<Seq>1</Seq>
<PropertyRoomTypeID>690039001</PropertyRoomTypeID>
<MealBasisID>7</MealBasisID>
<RoomType>Twin/double Room</RoomType>
<RoomView />
<MealBasis>Demi-Pension</MealBasis>
<NonRefundableRates>false</NonRefundableRates>
<SubTotal>291.64</SubTotal>
<Discount>0</Discount>
<Total>291.64</Total>
<Adults>2</Adults>
<Children>1</Children>
<Infants>0</Infants>
<Errata />
</RoomType>
<RoomType>
<Seq>1</Seq>
<PropertyRoomTypeID>690039002</PropertyRoomTypeID>
<MealBasisID>5</MealBasisID>
<RoomType>Double/twin Room</RoomType>
<RoomView />
<MealBasis>Pension Complète</MealBasis>
<NonRefundableRates>false</NonRefundableRates>
<SubTotal>529.22</SubTotal>
<Discount>0</Discount>
<Total>529.22</Total>
<Adults>2</Adults>
<Children>1</Children>
<Infants>0</Infants>
<Errata />
</RoomType>
</RoomTypes>
</PropertyResult>
</PropertyResults>
</SearchResult>
</SearchResponse>
</soap:Body>
</soap:Envelope>
Tôi không có đủ kinh nghiệm với dữ liệu XML. Tôi đã dành hàng giờ cố gắng chuyển đổi phản hồi XML thành một đối tượng hoặc mảng PHP, nhưng không thành công.
Tôi cần đọc tất cả PropertyResults.
PHP Code:
$xml = simplexml_load_string($soap_xml_result);
$xml->registerXPathNamespace('soap', 'http://schemas.xmlsoap.org/soap/envelope/');
$xml->registerXPathNamespace('xsi', 'http://www.w3.org/2001/XMLSchema-instance');
$xml->registerXPathNamespace('xsd', 'http://www.w3.org/2001/XMLSchema');
$test = (string) $xml->Body->SearchResponse->SearchResult->SearchURL;
var_export($test);
Cảm ơn câu trả lời của bạn, thiết lập không gian tên xPath trả về lỗi 500, có thể cấu hình sai máy chủ. Giải pháp thứ hai hoạt động tốt. – Hamza