首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从SimpleXMLElement对象获取项

从SimpleXMLElement对象获取项
EN

Stack Overflow用户
提问于 2010-01-02 12:02:19
回答 1查看 1.3K关注 0票数 1

据我所知,SimpleXMLElement只是一个由其他SimpleXMLElements组成的数组,如果在另一个标记中没有嵌套标记,则加上一些常规数组值。

我在变量$data中有一个SimpleXMLElement,var_dump($data)给了我这个:

代码语言:javascript
复制
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())会给我一个错误。

如下所示:

代码语言:javascript
复制
foreach($data as $item) {
    var_dump($item);
}

提供了一大堆SimpleXMLElement对象,但奇怪的是,没有字符串或int。

这里我漏掉了什么?我想获取它的特定部分,并将它们传递给一个函数,因此,例如,我不必

代码语言:javascript
复制
$data->billing-address->postal-code;

...

$data->shipping-address->postal-code;

...

然后就可以走了

代码语言:javascript
复制
address($data->billing-address);
address($data->shipping-address);

等。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-01-02 12:09:00

SimpleXMLElement不仅仅是一个数组。要访问子元素,必须使用对象表示法($a->b),要访问属性,必须使用数组表示法($a['b'])。

问题是,使用对象表示法,有效的标记名可能是非法的PHP代码。

您需要这样做:

代码语言:javascript
复制
$data->{'buyer-accepts-marketing'};

注意,这将返回一个SimpleXMLElement!这样做的原因是它既可以只包含文本,也可以包含更多的子元素,或者两者都包含。对于SimpleXMLElements来说,var_dump()的输出非常具有误导性。如果想要查看单个<buyer-accepts-marketing>标记的文本内容,则必须执行以下操作:

代码语言:javascript
复制
(string)$data->{'buyer-accepts-marketing'};

当然,这样做也完全合法:

代码语言:javascript
复制
(int)$data->{'buyer-accepts-marketing'};

在某些情况下(例如在SimpleXMLElement中使用echo),这似乎是可行的,原因是类型转换是隐式的和自动的。你不能echo一个对象,所以PHP会自动将它转换成一个字符串。

我和SimpleXML有一种又爱又恨的关系。只有在你理解了实际的API有多复杂之后,它才会让事情变得非常简单。

阅读所谓的"basic“示例,以便更好地掌握它。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1990565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档