1

Webサービスから取得している2つの異なるxmldoxumentがあります。

最初のリクエストを送信することで、ホテルの基本情報を含み、このような構造を持つxmlを取得しています

<offers>
<offer>
    <city_id>5</city_id>
    <city>Barcelona</city>
    <name>EnGrande test hotel</name>
    <address>Calle Muntaner 262</address>
    <price_no_vat>80</price_no_vat>
    <currency>EUR</currency>
    <type>Hotel</type>
    <description>
        A fantastic hotel at a fantastic price in a fantastic location.
    </description>
    <image_url>http://www.somesite.com/photos/hotels/bcn30_accomodation_1220_1.jpg</image_url>
    <offer_url>http://www.somesite.com/eg_offer_detail.php?hotel_id=191&checkin=2009-05-01&checkout=2009-05-02&city_id=5&guests=2</offer_url>
    <distance>3.175</distance>
</offer>

ホテルの詳細を含み、このような構造を持つ2番目のxmlドキュメント

<hotels>
<hotel> 
    <hotel_id>191</hotel_id> 
    <name>Test hotel</name> 
    <type>hostel</type> 
    <category>2</category> 
    <street>C/ de la Victoria, 2 - 4th floor left door. Madrid 28012.</street> 
    <postcode>28012</postcode> 
    <city>Madrid</city> 
    <city_id>5</city_id> 
    <description>This is a fantastic hotel</description> 
    <url>http://www.somesite.com/madrid-hostel-191-test-hotel.html</url> 
    <pppn>27.10</pppn> 
    <currency>EUR</currency> 
    <longitude>-3.701687097549</longitude> 
    <latitude>40.416587829590</latitude> 
    <images>
        <image>http://www.somesite.com/photos/hotels/30mad_accomodation_5_1.jpg</image>
        <image>http://www.somesite.com/photos/hotels/30mad_accomodation_5_2.jpg</image>
        <image>http://www.somesite.com/photos/hotels/30mad_accomodation_5_3.jpg</image>
        <image>http://www.somesite.com/photos/hotels/30mad_accomodation_5_4.jpg</image>
        <image>http://www.somesite.com/photos/hotels/30mad_accomodation_5_5.jpg</image>
        <image>http://www.somesite.com/photos/hotels/30mad_accomodation_5_6.jpg</image>
        <image>http://www.somesite.com/photos/hotels/30mad_accomodation_5_7.jpg</image>
        <image>http://www.somesite.com/photos/hotels/30mad_accomodation_5_8.jpg</image>
        <image>http://www.somesite.com/photos/hotels/30mad_accomodation_5_9.jpg</image>
    </images>
    <amenities>
        <amenity>Elevator / lift</amenity>
        <amenity>Laundry / washing machine</amenity>
        <amenity>TV lounge</amenity>
        <amenity>Left-luggage office</amenity>
        <amenity>Reception available</amenity>
        <amenity>24h reception</amenity>
        <amenity>Credit cards accepted</amenity>
        <amenity>TV</amenity>
        <amenity>Telephone</amenity>
        <amenity>Fans</amenity>
        <amenity>Heating</amenity>
        <amenity>Hair dryer</amenity>
        <amenity>Towels & sheets</amenity>
    </amenities>
</hotel> 

現在、2番目のxmlドキュメントには、同じ都市の多くのホテルが含まれています。2番目のxmlドキュメントでその名前を使用してホテルを検索し、その詳細を表示したいと思います。このためのphpコードを作成しました。これは次のようになります。

<?php 
$city_id = 6;

$request =  "http://www.somewebsite.com/feeds/phpfile.php?vendor_key=xxx&checkin=26-11-2012&checkout=30-11-2012&guests=3&city_id=".$city_id;

$same_city_hotels_request = "http://www.somewebsite.com/feeds/get-hotels.php?vendor_key=xxx&city_id=".$city_id; 


$offerxml = simplexml_load_file($request);
$same_city = simplexml_load_file($same_city_hotels_request);

$hotel = $offerxml->offer;

for($i=0;$i<=10;$i++){   

$hotel_info = $same_city->xpath("//hotel/name[contains(text(),'".$hotel[$i]->name."')]");

{
?>

<tr><td>name</td><td>category</td><td>city</td><td>Address</td><td>price</td><td>Image</td></tr>
<tr><td> <?php echo $hotel[$i]->name; ?></td>
<td><?php echo $hotel_info[$i]->category; ?></td>
<td> <?php echo $hotel[$i]->city; ?> </td>
<td><?php echo $hotel[$i]->address; ?></td><td><?php echo $hotel[$i]->price; ?></td>
<td><?php echo $hotel_info[$i]->image; ?></td></tr>

<?php } ?>

私がここで間違っていることを誰かが教えてもらえますか?

4

1 に答える 1

0

あなたのXPathは要素を返していnameます:

$hotel_info = $same_city->xpath(
    "//hotel/name[contains(text(),'".$hotel[$i]->name."')]"
);

しかし、PHP コードはその要素を要素であるかのように処理しようとしhotelます。

XPath がhotel要素ではなく要素を返すようにしnameます。次のいずれかの形式でそれを行う必要があります。

"//hotel/name[contains(text(),'".$hotel[$i]->name."')]/parent::*"
"//hotel[name[contains(.," . $hotel[$i]->name . ")]]"
"//hotel[contains(string(name)," . $hotel[$i]->name . ")]"
于 2012-09-24T14:21:12.363 に答える