Car*_*ers 1 php xml arrays object
据我所知,SimpleXMLElement只是一个其他SimpleXMLElements的数组,如果没有嵌套在另一个标签中的标签,还有一些常规数组值.
我在变量中有一个SimpleXMLElement $data,并var_dump($data)给我这个:
object(SimpleXMLElement)#1 (33) {
["buyer-accepts-marketing"]=>
string(4) "true"
...
...
Run Code Online (Sandbox Code Playgroud)
但是调用var_dump($data->buyer-accepts-marketing)给了我一个错误,并var_dump($data["buyer-accepts-marketing"])给了我NULL.通话var_dump($data->shipping-address->children())给我一个错误.
像这样:
foreach($data as $item) {
var_dump($item);
}
Run Code Online (Sandbox Code Playgroud)
给出了一大堆SimpleXMLElement对象,但奇怪的是,没有字符串或整数.
我在这里错过了什么?我想采取它的特定部分并将它们传递给一个函数,所以例如,我不必去
$data->billing-address->postal-code;
...
$data->shipping-address->postal-code;
...
Run Code Online (Sandbox Code Playgroud)
并且可以去
address($data->billing-address);
address($data->shipping-address);
Run Code Online (Sandbox Code Playgroud)
等等
的SimpleXMLElement是不是只是一个数组.要访问子元素,必须使用对象表示法($a->b)并访问必须使用数组表示法($a['b'])的属性.
问题是,使用对象表示法,有效的标记名称可能是非法的PHP代码.
你需要这样做:
$data->{'buyer-accepts-marketing'};
Run Code Online (Sandbox Code Playgroud)
请注意,这将返回SimpleXMLElement!原因是它可以包含文本,更多子元素或两者.输出var_dump()对于SimpleXMLElements来说是非常误导的.如果您想要单个<buyer-accepts-marketing>标记的文本内容,则必须执行以下操作:
(string)$data->{'buyer-accepts-marketing'};
Run Code Online (Sandbox Code Playgroud)
当然,这样做也是完全合法的:
(int)$data->{'buyer-accepts-marketing'};
Run Code Online (Sandbox Code Playgroud)
在某些情况下(例如echoSimpleXMLElement)似乎有效的原因是类型转换是隐式和自动的.您不能echo成为对象,因此PHP会自动将其转换为字符串.
我与SimpleXML有一种爱/恨的关系.只有在您了解实际API的复杂程度后,才能使事情变得非常简单.
阅读所谓的" 基本 "示例,以便更好地处理它.
| 归档时间: |
|
| 查看次数: |
1299 次 |
| 最近记录: |