从SimpleXMLElement对象获取项目
从我所知道的情况来看,SimpleXMLElement只是其他SimpleXMLElement的数组,另外还有一些常规数组值,如果没有嵌套在另一个标记中的标记。从SimpleXMLElement对象获取项目
我有一个SimpleXMLElement一个变量$data
和var_dump($data)
给了我这样的:
object(SimpleXMLElement)#1 (33) {
["buyer-accepts-marketing"]=>
string(4) "true"
...
...
但调用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);
}
给出一大堆的SimpleXMLElement对象,但奇怪的是,没有字符串或整数。
我在这里错过了什么?我想利用它的特定部分,并将它们传递给函数,因此,例如,我没有去
$data->billing-address->postal-code;
...
$data->shipping-address->postal-code;
...
,并可以去
address($data->billing-address);
address($data->shipping-address);
等
SimpleXMLElement是而不是只是一个数组。要访问子元素,必须使用对象表示法($a->b
)并访问必须使用数组表示法的属性($a['b']
)。
问题是,使用对象表示法,有效的标记名称可能是非法的PHP代码。
你需要这样做:
$data->{'buyer-accepts-marketing'};
注意它返回一个SimpleXMLElement!这是因为它可以包含文本,更多子元素或两者。对于SimpleXMLElements,var_dump()
的输出非常具有误导性。如果你想一个<buyer-accepts-marketing>
标签的文本内容,你必须这样做:
(string)$data->{'buyer-accepts-marketing'};
当然它也是完全合法的做到这一点:
(int)$data->{'buyer-accepts-marketing'};
这似乎是工作的原因在某些情况下(如echo
和SimpleXMLElement)是类型转换是隐式的和自动的。你不能echo
一个对象,所以PHP自动将它转换为一个字符串。
我与SimpleXML有爱/恨的关系。它使事情非常容易只有当你明白如何复杂实际的API是。
阅读所谓的“basic”示例,以便很好地掌握它。
是的!胜利!非常感谢! – 2010-01-02 04:11:34