2015-06-05 26 views
0

我正試圖解析starkoverflow.com/feeds/tag/{$tagName}。 這是我的代碼:如何從PHP中的SimpleXMLObject解析值`@ attribute`

<?php 
    $xml = file_get_contents("http://stackoverflow.com/feeds/tag/php"); 
    $simpleXml = simplexml_load_string($xml); 
    $attr = $simpleXml->entry->category->@attributes; 

?> 

當我執行上面的代碼中它給了我一個錯誤,Parse error: syntax error, unexpected '@', expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' in D:\wamp\www\success\protoT.php on line 4

所以,我的問題是如何讓@attributes的陣列?

Scrrenshot

回答

2

您使用appropriately documented method: attributes()

$attr = $simpleXml->entry->category->attributes(); 

除了$simpleXml->entry->category是一個數組,所以你需要指定要訪問的數組中的條目:

$attr = $simpleXml->entry->category[0]->attributes(); 

編輯

除非如我剛纔所知,你只需要參考第一個元素

+0

否決因爲第二半不正確:SimpleXML的將愉快地假定' - > category'相當於' - >類別[0]' – IMSoP

+0

對我來說是一件新事物,永遠不會知道......儘管OP可能需要使用數組索引從其他元素中選擇屬性,因此顯示語法仍然適用於那 –

+0

是的,這就是SimpleXML簡單的原因 - 它不是*數組,它是一個有很多DWIM魔法的對象。 :) – IMSoP

2

關鍵是,要實現沒有勺子數組。

要獲得所有屬性爲一個數組,你可以使用attributes()方法:

$all_attributes = $simpleXml->entry->category->attributes(); 

然而,大多數的時候,你真正需要的是一個特定的屬性,在這種情況下,你只需要使用數組關鍵符號:

$id_attribute = $simpleXml->entry->category['id']; 

請注意,這將返回一個對象;路過身邊時,你通常希望有隻表示其值的字符串:

$id_value = (string)$simpleXml->entry->category['id']; 

上述假定你總是希望在第一<entry>第一<category>元素,即使有多個。它實際上是速記用於指定第0項(如果是隻存在每個元素的其中一個工程連):

$id_value = (string)$simpleXml->entry[0]->category[0]['id']; 

或者,當然了,循環每一套(再次,它並不重要,如果有一個或多個,所述foreach仍將工作):

foreach ($simpleXml->entry as $entry) { 
    foreach ($entry->category as $category) { 
     $id_value_for_this_category = (string)$category['id']; 
    } 
}