2016-05-30 150 views
0

得到的字符串我有我的xml文件似乎无法从simpleXMLobject

<names> 
    <person> 
     <name>John</name> 
     <alias> 
      <part>Joe</part> 
      <part>Foo</part> 
     </alias> 
    </person> 
</names> 

我保存为$xml

foreach($xml as $person) 
    var_dump($person->name); 

上面的代码返回

object(SimpleXMLElement)#7 (1) { 
    [0]=> 
    string(4) "John" 
} 

,而不是仅仅

string(4) "John" 

有了实际回报它给,我会假设加入[0]该变量的结束会给我正确的回报,但它返回完全相同的东西。我曾尝试加入[0],["0"],->0,->"0",并且没有任何效果。最后2次尝试给了我一个解析错误,而前2次给了我与原始相同的响应。

如何从object(SimpleXMLElement)内部获得string(4) "John"

+4

通过将其明确地强制转换为字符串:'的var_dump((字符串)$人 - >名);' –

+0

'$ person-> name - > __ toString()'但是你不能害怕这个,php会把它转换成字符串。用于考试测试'echo $ person-> name' – splash58

+0

@MarkBaker说的。或者简单地'echo'-ing或'print',它会调用魔术方法'__toString()'。 https://3v4l.org/lrPMr – Havelock

回答

1

这是因为XML是一种资源,即:

$xml = '<names> 
     <person> 
      <name>John</name> 
      <alias> 
       <part>Joe</part> 
       <part>Foo</part> 
      </alias> 
     </person> 
    </names>'; 

$parsed = simplexml_load_string($xml); 

var_dump($parsed->getName()); 

将输出names,可见,该元件/层你是在被命名为names

所以parsed-> person-> name会给你一个资源。如果你要删除的资源,只是访问该值,则需要将其转换为字符串:

var_dump((string)$parsed->person->name);