XML DOM以最快捷的方式获得孩子

时间:2013-09-17 15:42:43

标签: php xml

我有一个来自外部服务器的嵌套xml,如下所示:

<?xml version="1.0" encoding="UTF-8" ?>
    <ResponseDetails Language="en">
      <SearchHotelPriceResponse>
        <HotelDetails>
          <Hotel HasExtraInfo="true" HasMap="true" HasPictures="true"
    Recommended = "true">
             <City Code="AMS"><![CDATA[ Amsterdam ]]></City>
             <Item Code="AME"><![CDATA[ AMERICAN ]]></Item>
          </Hotel>
          <Hotel HasExtraInfo="true" HasMap="true" HasPictures="true"
    Recommended = "true">
             <City Code="AMS"><![CDATA[ Amsterdam ]]></City>
             <Item Code="AME"><![CDATA[ AMERICAN2 ]]></Item>
          </Hotel>
       </HotelDetails>
     </SearchHotelPriceResponse>
    </ResponseDetails>
</Response>

我可以在酒店内有很多其他级别,但第一个目标是取Item

我试过这样的方式:

$hotelNodes = $xml_en->getElementsByTagName('Hotel');
foreach($hotelNodes as $hotel) {
    //how to print item value?!
}

我必须制作另一个getElementsByTagName,或者可以使用像$hotel->getElementsByTagName('Item')->nodeValue这样的东西来做这件事吗?

2 个答案:

答案 0 :(得分:2)

$xp = new DOMXPath($xml_en);
$items = $xp->query('//Hotel/Item');
foreach($items as $item) {
   echo $item->nodeValue;
}

答案 1 :(得分:0)

试试这个:

        $hotelNodes = $xml->getElementsByTagName('Hotel');
        foreach($hotelNodes as $hotel) {
            $nameofitem = $hotel->getElementsByTagName( "Item" );
            $nameofcity = $hotel->getElementsByTagName( "City" );
            echo('<p>name hotel: '.$nameofitem->item(0)->nodeValue.' name city: '.$nameofcity->item(0)->nodeValue.'</p>');
        }