SimpleXML / PHP – Не удается получить доступ к объекту

$tmp2 = '<?xml version="1.0"?><RWResponse><RESPONSE><DATA><HEADER><COLUMN>interval</COLUMN><COLUMN>name</COLUMN></HEADER></DATA></RESPONSE></RWResponse>'; $xml = simplexml_load_string($tmp2); echo $xml->RESPONSE->DATA->HEADER->COLUMN[0]; 

Вышеприведенное ничего не выводит, хотя var_dump является успешным:

 object(SimpleXMLElement)#2 (1) { ["RESPONSE"]=> object(SimpleXMLElement)#3 (1) { ["DATA"]=> object(SimpleXMLElement)#4 (1) { ["HEADER"]=> object(SimpleXMLElement)#5 (1) { ["COLUMN"]=> array(2) { [0]=> string(8) "interval" [1]=> string(13) "creative_name" } } } } } 

благодаря

Это связано с тем, что SimpleXML требует точного приведения типов, или вы будете получать такие распространенные вещи, как это: var_dump выдаст то, что вы хотите, echo не будет. Вам всегда нужно это делать, есть еще худшие ошибки, например, echo ceil($simplexml->someNumber) будет выводить 7 если это число, например, 7.85 и т. Д.
Попробуйте вместо этого:

 echo (string)$xml->RESPONSE->DATA->HEADER->COLUMN[0]; 

Вход XML действителен, я полагаю, проблема связана с вашей настройкой PHP (старая или багги версия). Это вывод на моем компьютере (PHP 5.3.8):

 $tmp2 = '<?xml version="1.0"?><RWResponse><RESPONSE><DATA><HEADER><COLUMN>interval</COLUMN><COLUMN>name</COLUMN></HEADER></DATA></RESPONSE></RWResponse>'; $xml = new SimpleXMLElement($tmp2); var_dump($xml); // output: object(SimpleXMLElement)#1 (1) { ["RESPONSE"]=> object(SimpleXMLElement)#2 (1) { ["DATA"]=> object(SimpleXMLElement)#3 (1) { ["HEADER"]=> object(SimpleXMLElement)#4 (1) { ["COLUMN"]=> array(2) { [0]=> string(8) "interval" [1]=> string(4) "name" } } } } } 

EDIT после обновления вопроса:

Это действительно ваша версия PHP, это результат на моей машине:

 $tmp2 = '<?xml version="1.0"?><RWResponse><RESPONSE><DATA><HEADER><COLUMN>interval</COLUMN><COLUMN>name</COLUMN></HEADER></DATA></RESPONSE></RWResponse>'; $xml = simplexml_load_string($tmp2); echo $xml->RESPONSE->DATA->HEADER->COLUMN[0]; // output: interval 

Вы можете попытаться подавить ошибки, а затем повторить их проверку, если вы можете исправить их, как описано ЗДЕСЬ , потому что я не вижу ошибки в примере XML.

  $tmp2 = '<?xml version="1.0"?><RWResponse><RESPONSE><DATA><HEADER><COLUMN>interval</COLUMN><COLUMN>name</COLUMN></HEADER></DATA></RESPONSE></RWResponse>'; $xml = simplexml_load_string($tmp2); var_dump($xml); 
 object(SimpleXMLElement)#1 (1) { ["RESPONSE"]=> object(SimpleXMLElement)#2 (1) { ["DATA"]=> object(SimpleXMLElement)#3 (1) { ["HEADER"]=> object(SimpleXMLElement)#4 (1) { ["COLUMN"]=> array(2) { [0]=> string(8) "interval" [1]=> string(4) "name" } } } } } 
 $tmp2 = <<<XML<?xml version="1.0" standalone='yes'?> <RWResponse> <RESPONSE> <DATA> <HEADER> <COLUMN>interval</COLUMN> <COLUMN>name</COLUMN> </HEADER> </DATA> </RESPONSE> </RWResponse> XML; 

был бы реальным способом сделать это, так что независимо от ввода XML, вы бы взяли и настроили его так, чтобы он выглядел больше так, чтобы он не был «строкой», но на самом деле составлял XML-информацию.