2010-12-01 59 views

回答

12

这是一个SimpleXMLElement对象。 '@attributes'行是来自XML元素的attributes的内部表示。使用SimpleXML的函数从这个对象获取数据,而不是直接与它交互。

+0

但为什么用@符号显示呢? – cambraca 2010-12-01 18:55:37

+0

我不知道为什么。我想,SimpleXML决定命名数组元素。 – 2010-12-01 18:58:26

+0

@Rocket我找不到包含变量名称@的方法 – cambraca 2010-12-01 19:00:56

9

所有关于误差控制这些问题的答案是不正确的。 @并不意味着任何东西。这就是财产如何在内部呼叫,但不依赖于此。在处理SimpleXML时不要依赖print_r()var_dump()。 SimpleXML的做了很多没有被正确地print_r()var_dump()为代表的“神奇”的事情。

如果你需要知道什么是“内部”一个XML片段,只要使用就可以了->asXML()

1

对不起,不能作为嘉宾但是对于其他人谁在这里结束了,像我一样......我创造我自己的Joomla表单字段和Joomla创造各种东西的一个非常“有趣”的对象发表评论。现在,我不想成为一名SimpleXML专家,我想要的只是原始标签文本,这些标签文本在@attributes中被松动了。

后有点"hmmm, I wonder if this works?"™我发现这是访问这些值的最简单的方法:他们没有说谎

var_dump($simpleXMLObject); 

/* Result */ 
object(SimpleXMLElement) 
    public '@attributes' => 
    array (size=3) 
     'name' => string 'awesome' 
     'label' => string 'Awesome Label' 
     'type' => string 'typeOfAwesome' 

echo $simpleXMLObject->attributes()->label; // Awesome Label 

$simpleXMLObject->attributes()->label = 'Different Day, Different Awesome'; 
echo $simpleXMLObject->attributes()->label; // Different Day, Different Awesome 

。它确实很简单。

0

我没有足够的代表对user3098738发表评论......但想验证他的回应。这真的很简单。任何时候在SimpleXML中运行@属性...使用

$simpleXMLObject->attributes() 
$simpleXMLObject->key->attributes() 
0

我正在使用仅提供XML格式的数据的HTTP API。所以首先我将它加载到SimpleXML中,并且也被@attributes问题困惑了。我如何获得它包含的宝贵数据? print_r()困惑我。

我的解决办法是创建通过用foreach SimpleXML对象阵列迭代变量为0环路和在与attribues()方法的数据获取,并将其加载到我创建的数组。在foreach循环结束之前迭代。

所以的print_r()从表示本去:

SimpleXMLElement Object 
(
    [@attributes] => Array 
     (
      [ID] => 1 
      [First] => John 
      [Last] => Smith 
     ) 
) 

为了更加可用正常阵列。这很好,因为我希望可以根据需要快速将数组转换为json。

我的代码如下:

$obj = simplexml_load_string($apiXmlData); 
$fugly = $obj->Deeply->Nested->XML->Data->Names; 
$people = array(); 
$i = 0; 
foreach($fugly as $val) 
{ 
    $people[$i]['id'] += $val->attributes()->ID; 
    $people[$i]['first'] = "". $val->attributes()->First; 
    $people[$i]['last'] = "". $val->attributes()->Last; 
    $i++; 
} 

速记将PHP的的setType()函数是怪异/越野车,所以我增加了+确保ID是整数并添加引用以确保名称是字符串。如果没有某种类型的变量转换,那么您将要将SimpleXML对象加载到您创建的数组中。

的print_r()的最终结果:

Array 
(
    [0] => Array 
    (
     [id] => 1 
     [first] => John 
     [last] => Smith 
    ) 

    [1] => Array 
    (
     [id] => 2 
     [first] => Jane 
     [last] => Doe 
    ) 
)