这是print_r()
运行的一个典型的SimpleXMLElement对象的输出:“在符号”@在SimpleXML对象?
SimpleXMLElement Object
(
[@attributes] => Array
(
)
)
什么是@符号是什么意思?
这是print_r()
运行的一个典型的SimpleXMLElement对象的输出:“在符号”@在SimpleXML对象?
SimpleXMLElement Object
(
[@attributes] => Array
(
)
)
什么是@符号是什么意思?
这是一个SimpleXMLElement对象。 '@attributes'行是来自XML元素的attributes的内部表示。使用SimpleXML的函数从这个对象获取数据,而不是直接与它交互。
所有关于误差控制这些问题的答案是不正确的。 @并不意味着任何东西。这就是财产如何在内部呼叫,但不依赖于此。在处理SimpleXML时不要依赖print_r()
或var_dump()
。 SimpleXML的做了很多没有被正确地print_r()
和var_dump()
为代表的“神奇”的事情。
如果你需要知道什么是“内部”一个XML片段,只要使用就可以了->asXML()
。
对不起,不能作为嘉宾但是对于其他人谁在这里结束了,像我一样......我创造我自己的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
。它确实很简单。
我没有足够的代表对user3098738发表评论......但想验证他的回应。这真的很简单。任何时候在SimpleXML中运行@属性...使用
$simpleXMLObject->attributes()
$simpleXMLObject->key->attributes()
我正在使用仅提供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
)
)
但为什么用@符号显示呢? – cambraca 2010-12-01 18:55:37
我不知道为什么。我想,SimpleXML决定命名数组元素。 – 2010-12-01 18:58:26
@Rocket我找不到包含变量名称@的方法 – cambraca 2010-12-01 19:00:56