无法获取嵌套的 SimpleXMLElement 的属性
Cannot get attributes of nested 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);
但是,我无法访问 Image 中的 img 标签。
我想我会使用 $xml->Image[0]->img
来获取元素和
$xml->Image[0]->img['src']
获取图像的 url。但我不断收到错误消息:
Trying to get property 'img' of non-object
$xml->Image[0]
测试为 SimpleXMLElement 类型,当我 print_r()
我得到:
SimpleXMLElement Object (
[img] => SimpleXMLElement Object (
[@attributes] => Array (
[src] => https://image.com?id=123
[alt] => alt text
)
)
)
就像我说的,我知道我遗漏了一些非常明显的东西,所以我们将不胜感激。
你是对的,$xml->Image[0]->img['src']
会给你 src
属性,但它会给你 作为 object。
如果你 运行 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
原因是 the SimpleXMLElement class 实现了魔术重载方法 __toString
(或内部 C 代码中的等效方法),因此无论何时将 object 转换为字符串,它都会给你字符串内容。由于 echo
总是需要一个字符串,它隐式地执行此操作,但您可以使用 (string)
显式地执行此操作,例如:
$imageSrc = (string)$xml->Image[0]->img['src'];
var_dump($imageSrc);
(作为 side-note,[0]
始终是可选的 - 如果您不提供数字,SimpleXML 假定您想要唯一或第一个具有该名称的 child,所以 $xml->Image->img['src']
、$xml->Image[0]->img['src']
、$xml->Image->img[0]['src']
和 $xml->Image[0]->img[0]['src']
都会给出相同的结果。)
显然我遗漏了一些简单的东西。
我有以下 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);
但是,我无法访问 Image 中的 img 标签。
我想我会使用 $xml->Image[0]->img
来获取元素和
$xml->Image[0]->img['src']
获取图像的 url。但我不断收到错误消息:
Trying to get property 'img' of non-object
$xml->Image[0]
测试为 SimpleXMLElement 类型,当我 print_r()
我得到:
SimpleXMLElement Object (
[img] => SimpleXMLElement Object (
[@attributes] => Array (
[src] => https://image.com?id=123
[alt] => alt text
)
)
)
就像我说的,我知道我遗漏了一些非常明显的东西,所以我们将不胜感激。
你是对的,$xml->Image[0]->img['src']
会给你 src
属性,但它会给你 作为 object。
如果你 运行 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
原因是 the SimpleXMLElement class 实现了魔术重载方法 __toString
(或内部 C 代码中的等效方法),因此无论何时将 object 转换为字符串,它都会给你字符串内容。由于 echo
总是需要一个字符串,它隐式地执行此操作,但您可以使用 (string)
显式地执行此操作,例如:
$imageSrc = (string)$xml->Image[0]->img['src'];
var_dump($imageSrc);
(作为 side-note,[0]
始终是可选的 - 如果您不提供数字,SimpleXML 假定您想要唯一或第一个具有该名称的 child,所以 $xml->Image->img['src']
、$xml->Image[0]->img['src']
、$xml->Image->img[0]['src']
和 $xml->Image[0]->img[0]['src']
都会给出相同的结果。)