无法获取嵌套的 SimpleXMLElement 的属性

显然我错过了一些简单的东西。


我有以下 xml 字符串,我使用 simplexml_load_string 解析它:


$xmlString = '<root><Title>Heading Text</Title><Image><img src="https://image.com?id=123" alt="alt text" /></Image></root>';


$xml = simplexml_load_string($xmlString);

但是,我无法访问图像内的 img 标签。


我想我会用来$xml->Image[0]->img获取元素并 $xml->Image[0]->img['src']获取图像的 url。但我不断收到错误:


尝试获取非对象的属性“img”


$xml->Image[0]测试为 SimpleXMLElement 类型,当我print_r()得到:


SimpleXMLElement Object (     

  [img] => SimpleXMLElement Object (             

    [@attributes] => Array (

       [src] => https://image.com?id=123

       [alt] => alt text 

    )          

  )  

)

就像我说的,我知道我错过了一些非常明显的东西,所以任何帮助将不胜感激。


慕妹3242003
浏览 240回答 1
1回答

慕尼黑8549860

你是对的,$xml->Image[0]->img['src']会给你属性,但它会把它作为一个对象src给你。如果你运行print_r($xml->Image[0]->img['src']);它会向你显示:SimpleXMLElement Object(     [0] => https://image.com?id=123)但如果你echo $xml->Image[0]->img['src'];改为运行,它会给你这个:https://image.com?id=123原因是SimpleXMLElement 类实现了神奇的重载方法__toString(或其在内部 C 代码中的等效方法),因此每当您将对象转换为字符串时,它都会为您提供字符串内容。由于echo始终需要一个字符串,因此它隐式执行此操作,但您可以使用 显式执行此操作(string),例如:$imageSrc = (string)$xml->Image[0]->img['src']; var_dump($imageSrc);(顺便说一句,[0]始终是可选的 - 如果您不提供数字,SimpleXML 会假设您想要唯一或第一个具有该名称的子项,因此、$xml->Image->img['src']和都会给出相同的结果。)$xml->Image[0]->img['src']$xml->Image->img[0]['src']$xml->Image[0]->img[0]['src']
打开App,查看更多内容
随时随地看视频慕课网APP