我正在使用Amazon API检索产品信息,而响应(使用simplexml_load_string()
转换为对象)如下所示:
SimpleXMLElement Object
(
[Items] => SimpleXMLElement Object
(
[Item] => SimpleXMLElement Object
(
[ASIN] => B00C9WDZIG
[ParentASIN] => B00C9WDZIG
)
)
)
输出:
var_dump($parsed_xml->Items->Item->ASIN);
var_dump($parsed_xml->Items->Item->ParentASIN);
就是这样:
object(SimpleXMLElement)[3]
string 'B00C9WDZIG' (length=10)
object(SimpleXMLElement)[4]
string 'B00C9WDZIG' (length=10)
我很困惑,因为var_dump()
正在输出对象而不是字符串。这是为什么?第三个ASIN
对象中不包含ParentASIN
和SimpleXMLElement
个字符串值吗?
换句话说,我期望输出为:
string 'B00C9WDZIG' (length=10)
string 'B00C9WDZIG' (length=10)
我很困惑,为什么不是。
任何人都能解释一下吗?
答案 0 :(得分:4)
SimpleXML是一个链式对象。它具有欺骗性,因为你可以做类似
的事情echo (string)$xml->tag;
获得<tag>value</tag>
之类的值。但tag
也是SimpleXML的一个实例,因为您可能需要仍然获取属性或子项。所以var_dump
是正确的。
让我进一步解释。这里有一些示例XML
<xml>
<mytag>
<skate>roll</skate>
<surf>swim</surf>
</mytag>
</xml>
当我们将它转储到SimpleXMLElement(SXE)时,我们得到的是SXE的一个实例。所以顶级对象是我们的整体包装器<xml>
,我们会说我们将其转储到$xml
。下一级是$xml->mytag
。这也是一个SXE对象。 $xml->mytag->skate
和$xml->mytag->surf
也是如此。如果你这样做
var_dump($xml->mytag->surf);
它也会告诉你。它需要这样,因为我们想要修改XML。我们可以直接进入
$xml->mytag->addChild('skydive', 'fall');
echo $xml->asXML();
哪个输出
<xml>
<mytag>
<skate>roll</skate>
<surf>swim</surf>
<skydive>fall</skydive>
</mytag>
</xml>