2010-12-01 61 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 
    ) 
)