2016-08-30 78 views
0

我對來自Web服務器的響應中的數據(soap XML)有問題。 這是服務器的響應:PHP - 節點DOM錯誤:「調用null上的成員函數getAttribute()」

<xsd:hotel xsd:id="50280829" xsd:name="Villa D'Amato" xsd:lastUpdated="2016-07-28T20:33:00.786+03:00"> 
     <xsd:room xsd:seqNo="0" xsd:id="2445883190" xsd:specialOffer="false" xsd:price="127.14" xsd:visaSupport="false"> 
      <xsd:boardType xsd:groupId="30309841" xsd:groupName="Breakfast" xsd1:id="2359298" xsd1:name="Breakfast" xsd1:nameEn="Breakfast" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
      <xsd:roomType xsd1:id="54308004" xsd:hotelstonName="Superior Room Double Or Twin - Double Bed" xsd1:name="Superior Double or Twin Room (1 Double Bed)" xsd1:nameEn="Superior Double or Twin Room (1 Double Bed)" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
      <xsd:specifficSpecialOffer xsd1:type="PACKAGE_RATE" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
     </xsd:room> 
     <xsd:room xsd:seqNo="0" xsd:id="2445883190" xsd:specialOffer="false" xsd:price="127.14" xsd:visaSupport="false"> 
      <xsd:boardType xsd:groupId="30309841" xsd:groupName="Breakfast" xsd1:id="2359298" xsd1:name="Breakfast" xsd1:nameEn="Breakfast" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
      <xsd:roomType xsd1:id="54308001" xsd:hotelstonName="Superior Room Double Or Twin" xsd1:name="Superior Double or Twin Room (2 Twin Beds)" xsd1:nameEn="Superior Double or Twin Room (2 Twin Beds)" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
      <xsd:specifficSpecialOffer xsd1:type="PACKAGE_RATE" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
     </xsd:room> 
     <xsd:room xsd:seqNo="0" xsd:id="2445883057" xsd:specialOffer="false" xsd:price="129.76" xsd:visaSupport="false"> 
      <xsd:boardType xsd:groupId="30309841" xsd:groupName="Breakfast" xsd1:id="30769205" xsd1:name="English Breakfast" xsd1:nameEn="English Breakfast" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
      <xsd:roomType xsd1:id="52656547" xsd:hotelstonName="Superior Room Double Or Twin" xsd1:name="Superior Double or Twin Room" xsd1:nameEn="Superior Double or Twin Room" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
     </xsd:room> 
     <xsd:room xsd:seqNo="0" xsd:id="2445883059" xsd:specialOffer="false" xsd:price="132.00" xsd:visaSupport="false"> 
      <xsd:boardType xsd:groupId="30309844" xsd:groupName="Room Only" xsd1:id="2359299" xsd1:name="Room Only" xsd1:nameEn="Room Only" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
      <xsd:roomType xsd1:id="53337950" xsd:hotelstonName="Superior Room Double Or Twin - Double Bed" xsd1:name="Superior Double or Twin Room - 1 double bed" xsd1:nameEn="Superior Double or Twin Room - 1 double bed" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
     </xsd:room> 
     <xsd:room xsd:seqNo="0" xsd:id="2445883192" xsd:specialOffer="false" xsd:price="137.74" xsd:visaSupport="false"> 
      <xsd:boardType xsd:groupId="30309841" xsd:groupName="Breakfast" xsd1:id="2359298" xsd1:name="Breakfast" xsd1:nameEn="Breakfast" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
      <xsd:roomType xsd1:id="54308002" xsd:hotelstonName="Deluxe Room Double Or Twin - Double Bed" xsd1:name="Deluxe Double or Twin Room (1 Double Bed)" xsd1:nameEn="Deluxe Double or Twin Room (1 Double Bed)" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
      <xsd:specifficSpecialOffer xsd1:type="PACKAGE_RATE" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
     </xsd:room> 
     <xsd:room xsd:seqNo="0" xsd:id="2445883192" xsd:specialOffer="false" xsd:price="137.74" xsd:visaSupport="false"> 
      <xsd:boardType xsd:groupId="30309841" xsd:groupName="Breakfast" xsd1:id="2359298" xsd1:name="Breakfast" xsd1:nameEn="Breakfast" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
      <xsd:roomType xsd1:id="54308003" xsd:hotelstonName="Deluxe Room Double Or Twin" xsd1:name="Deluxe Double or Twin Room (2 Twin Beds)" xsd1:nameEn="Deluxe Double or Twin Room (2 Twin Beds)" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
      <xsd:specifficSpecialOffer xsd1:type="PACKAGE_RATE" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
     </xsd:room> 
     <xsd:room xsd:seqNo="0" xsd:id="2445883060" xsd:specialOffer="false" xsd:price="140.58" xsd:visaSupport="false"> 
      <xsd:boardType xsd:groupId="30309841" xsd:groupName="Breakfast" xsd1:id="30769205" xsd1:name="English Breakfast" xsd1:nameEn="English Breakfast" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
      <xsd:roomType xsd1:id="55809087" xsd:hotelstonName="Deluxe Room Double Or Twin" xsd1:name="Deluxe Double or Twin Room" xsd1:nameEn="Deluxe Double or Twin Room" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
     </xsd:room> 
     <xsd:room xsd:seqNo="0" xsd:id="2445883061" xsd:specialOffer="false" xsd:price="142.80" xsd:visaSupport="false"> 
      <xsd:boardType xsd:groupId="30309844" xsd:groupName="Room Only" xsd1:id="2359299" xsd1:name="Room Only" xsd1:nameEn="Room Only" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
      <xsd:roomType xsd1:id="53338038" xsd:hotelstonName="Deluxe Room Double Or Twin - Double Bed" xsd1:name="Deluxe Double or Twin Room - 1 double bed" xsd1:nameEn="Deluxe Double or Twin Room - 1 double bed" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
     </xsd:room> 
     <xsd:room xsd:seqNo="0" xsd:id="2445883948" xsd:specialOffer="false" xsd:price="145.20" xsd:visaSupport="false"> 
      <xsd:boardType xsd:groupId="30309841" xsd:groupName="Breakfast" xsd1:id="30769205" xsd1:name="English Breakfast" xsd1:nameEn="English Breakfast" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
      <xsd:roomType xsd1:id="52625987" xsd:hotelstonName="Room Double" xsd1:name="Double Room" xsd1:nameEn="Double Room" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
     </xsd:room> 
     <xsd:room xsd:seqNo="0" xsd:id="2445883949" xsd:specialOffer="false" xsd:price="145.20" xsd:visaSupport="false"> 
      <xsd:boardType xsd:groupId="30309841" xsd:groupName="Breakfast" xsd1:id="30769205" xsd1:name="English Breakfast" xsd1:nameEn="English Breakfast" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
      <xsd:roomType xsd1:id="52625978" xsd:hotelstonName="Room Twin" xsd1:name="Twin Room" xsd1:nameEn="Twin Room" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
     </xsd:room> 
     <xsd:room xsd:seqNo="0" xsd:id="2445883474" xsd:specialOffer="false" xsd:price="175.22" xsd:visaSupport="false"> 
      <xsd:boardType xsd:groupId="30309841" xsd:groupName="Breakfast" xsd1:id="2359298" xsd1:name="Breakfast" xsd1:nameEn="Breakfast" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
      <xsd:roomType xsd1:id="56172839" xsd:hotelstonName="Standard Double Or Twin" xsd1:name="Double or twin standard" xsd1:nameEn="Double or twin standard" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
     </xsd:room> 
     <xsd:room xsd:seqNo="0" xsd:id="2445882979" xsd:specialOffer="false" xsd:price="233.07" xsd:visaSupport="false"> 
      <xsd:boardType xsd:groupId="30309843" xsd:groupName="Half Board" xsd1:id="50000721" xsd1:name="Cold Buffet Half Board" xsd1:nameEn="Cold Buffet Half Board" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
      <xsd:roomType xsd1:id="50281796" xsd:hotelstonName="Standard Room" xsd1:name="Standard Room" xsd1:nameEn="Standard Room" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
     </xsd:room> 
     <xsd:room xsd:seqNo="0" xsd:id="2445883063" xsd:specialOffer="false" xsd:price="309.60" xsd:visaSupport="false"> 
      <xsd:boardType xsd:groupId="30309842" xsd:groupName="Full Board" xsd1:id="3244032" xsd1:name="Full Board" xsd1:nameEn="Full Board" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
      <xsd:roomType xsd1:id="52679712" xsd:hotelstonName="Standard Room" xsd1:name="Standard Room" xsd1:nameEn="Standard Room" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 
     </xsd:room> 
    </xsd:hotel> 

出現該問題,當我嘗試導出變量的值:如果您註釋此行代碼一切工作正常

<xsd:specifficSpecialOffer xsd1:type="PACKAGE_RATE" xmlns:xsd1="http://types.ws.hotelston.com/xsd"/> 

事實上。 我試圖孤立完全放棄行試圖只有在這種方式中存在的節點值改爲:

if($specialOffer==null) { 
$tipo_offerta=""; 
} else { 
$tipo_offerta= $specialOffer[0]->getAttribute('xsd1:type'); 
} 

但遺憾的是它仍然無法正常工作! 我知道問題的發生是因爲這個標籤不在房間的所有節點上。 有人可以解釋爲什麼嗎?我怎麼能解決這個問題?

$specialOffer 

是響應的節點

並感謝所有

+0

[參考 - 這個錯誤在PHP中意味着什麼?](http://stackoverflow.com/questions/12769982/reference-what-does-this-error-mean-in-php) –

+0

'$ specialOffer'可能是一個空數組? –

+0

@CharlotteDunois我讀過但找不到任何可以幫助你建議的頁面......你能幫助我嗎? –

回答

0

解決方案:

if($specialOffer==NULL){ 
$tipo_offerta=""; 
} else { 
$tipo_offerta= $specialOffer[0]->getAttribute('xsd1:type'); 
} 

何時檢查是否存在或不點的我忘了補充索引陣列

$specialOffer[0]

我使用了0,我沒有使用計數器,因爲它是唯一的節點。

相關問題