DOMDocument simple GetElementsByTagName не работает?

$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, а статус $ должен содержать «доставлен» – но ни одна из этих работ не работает, я оставляю сообщение об ошибке:

 Trying to get property of non-object 

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

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

Solutions Collecting From Web of "DOMDocument simple GetElementsByTagName не работает?"

Используя простой 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 } 

Вам нужно указать пространство имен, а метод DOMDocument :: getElementsByTagName не сможет обработать его. В руководстве :

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

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

 $dom = new DOMDocument; $dom->loadXML($xml); $namespaceURI = 'http://www.shrinktheweb.com/doc/stwresponse.xsd'; $result = $dom->getElementsByTagNameNS($namespaceURI, 'Thumbnail')->item(0)->nodeValue; 

Этот код на самом деле работает отлично для меня —

Как правило, такая ошибка означает, что вы можете опечатать свой объект $dom – дважды проверьте его и повторите попытку.

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

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