为了账号安全,请及时绑定邮箱和手机立即绑定

无法获取嵌套的 SimpleXMLElement 的属性

无法获取嵌套的 SimpleXMLElement 的属性

PHP
慕妹3242003 2023-11-04 20:56:32
显然我错过了一些简单的东西。我有以下 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']


查看完整回答
反对 回复 2023-11-04
  • 1 回答
  • 0 关注
  • 142 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信