2014-10-20 2 views
2
 $xml = '<?xml version="1.0" encoding="UTF-8"?> 
<stw:ThumbnailResponse xmlns:stw="http://www.shrinktheweb.com/doc/stwresponse.xsd"> 
    <stw:Response> 
     <stw:ThumbnailResult> 
      <stw:Thumbnail Exists="true">http://imagelink.com</stw:Thumbnail> 
      <stw:Thumbnail Verified="false">delivered</stw:Thumbnail> 
     </stw:ThumbnailResult> 
     <stw:ResponseStatus> 
      <stw:StatusCode>refresh</stw:StatusCode> 
     </stw:ResponseStatus> 
     <stw:ResponseTimestamp> 
      <stw:StatusCode>1413812009</stw:StatusCode> 
     </stw:ResponseTimestamp> 
     <stw:ResponseCode> 
      <stw:StatusCode>HTTP:200</stw:StatusCode> 
     </stw:ResponseCode> 
     <stw:CategoryCode> 
      <stw:StatusCode></stw:StatusCode> 
     </stw:CategoryCode> 
     <stw:Quota_Remaining> 
      <stw:StatusCode>132</stw:StatusCode> 
     </stw:Quota_Remaining> 
     <stw:Bandwidth_Remaining> 
      <stw:StatusCode>999791</stw:StatusCode> 
     </stw:Bandwidth_Remaining> 
    </stw:Response> 
</stw:ThumbnailResponse>'; 

     $dom = new DOMDocument; 
     $dom->loadXML($xml); 


     $result = $dom->getElementsByTagName('stw:Thumbnail')->item(0)->nodeValue; 
     $status = $dom->getElementsByTagName('stw:Thumbnail')->item(0)->nodeValue; 

     echo $result; 

Имея выше код должен вывести http://imagelink.com и $ статус должен держать «доставлены», - но ни один из них не работает, а не я оставил с уведомлением об ошибке, что:DOMDocument simple GetElementsByTagName не работает?

Trying to get property of non-object 

Я пытался альтернативы разбора разные XML как simplexml (но это не сработало, когда имена тегов были: в нем), и я пробовал прокручивать каждую область в xml (ThumbNailresponse, response, а затем thumbnailresult) без везения.

Как я могу получить значения внутри stw: Thumbnail?

+1

вы уверены вот ваш XML? он имеет пространство имен. где находятся значения 'xmlns =" ​​http://www.yahoo.com "? – Ghost

+0

@Ghost, на самом деле это xml-ответ, с которым я должен работать с webservice shrinktheweb.com. Я удалил xmlns = "" только потому, что не хотел связывать вопрос с веб-сервисом. Но я добавил его сейчас, если это для какой-либо помощи? – Karem

+0

Вот почему мне интересно, где это пространство имен, так или иначе, вы можете использовать простой xml в этом конкретном случае, проверить мой ответ – Ghost

ответ

0

Используя простой XML, вы можете использовать метод ->children() на этом:

$xml = simplexml_load_string($xml_string); 
$stw = $xml->children('stw', 'http://www.shrinktheweb.com/doc/stwresponse.xsd'); 
echo '<pre>'; 
foreach($stw as $e) { 
    print_r($e); 
    // do what you have to do here 
} 
0

Этот код на самом деле работает очень хорошо для меня ---

Как правило, такого рода ошибки означает, что вы may've сделал опечатку на вашем $dom объекта - проверьте его и попробуйте еще раз.

Кроме того, следует отметить, что вы хотите изменить item(0) на item(1), когда вы устанавливаете переменную $status.

$result = $dom->getElementsByTagName('stw:Thumbnail')->item(0)->nodeValue; 
    $status = $dom->getElementsByTagName('stw:Thumbnail')->item(0)->nodeValue; 
1

Вы должны указать пространство имен и метод DOMDocument :: getElementsByTagName не может справиться с этим. В manual:

местное название (без имен) тега для сопоставления.

Вы можете использовать DOMDocument::getElementsByTagNameNS вместо:

$dom = new DOMDocument; 
$dom->loadXML($xml); 

$namespaceURI = 'http://www.shrinktheweb.com/doc/stwresponse.xsd'; 
$result = $dom->getElementsByTagNameNS($namespaceURI, 'Thumbnail')->item(0)->nodeValue; 
Смежные вопросы