$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-информацию.