显然我错过了一些简单的东西。我有以下 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 ) ) )就像我说的,我知道我错过了一些非常明显的东西,所以任何帮助将不胜感激。
1 回答
慕尼黑8549860
TA贡献1818条经验 获得超11个赞
你是对的,$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']
- 1 回答
- 0 关注
- 236 浏览
添加回答
举报
0/150
提交
取消