开发者

SimpleXML/PHP - Can't access object

$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];

The above won't output anything, even though a var_dump is sucessful:

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"
        }开发者_如何学编程
      }
    }
  }
}

Thanks


This is because SimpleXML requires exact typecasting or you'll get riddiculous things happening like this - var_dump will output what you want, echo won't. You always need to do this, there are even worse bugs, like echo ceil($simplexml->someNumber) will output 7 if the number is for example 7.85 and so on.
Try instead:

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


The XML input is valid, I suppose the problem is with your PHP setup (old or buggy version). This is the output on my machine (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 after update of question:

This really must be your PHP version, this is the output on my machine again:

$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


You could try to suppress the errors and then iterate over them an check if you can fix them, like explained HERE, because I can't see an error in the example 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;

would be the real way to do it, so whatever the XML input is, you would take and configure it so that it looks more like that so that it's not a 'string' but it's actually formulated XML information.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜