2012-10-09 81 views
0

我有這樣的XML如何讓多個XML元素使用PHP的SimpleXML屬性

<STOREITEMS> 
    <CREATED value="Tue Oct 9 5:30:01 BST 2012"> 
    <CATEGORY id="442" name="Hen And Stag Nights"></CATEGORY> 
    <CATEGORY id="69" name="Games"></CATEGORY> 
    <CATEGORY id="252" name="Love Zone"></CATEGORY> 
    <CATEGORY id="202" name="Spotlight Items"></CATEGORY> 
    </CREATED> 
</STOREITEMS> 

我需要獲得類別 - 用PHP name屬性

到目前爲止,我有這個

$xml = simplexml_load_file("http://www.dropshipping.co.uk/catalog/xml_id_multi_info.xml"); 

foreach($xml->CATEGORY['name']->attributes() as $category)  
{  
    echo $category; 
} 

然而這返回致命錯誤:調用成員函數屬性()在非對象上

任何想法? 謝謝。

回答

5

CATEGORY節點嵌套在CREATED節點內,所以你需要在那裏訪問,並訪問CATEGORY['name']->attributes()是沒有意義的,因爲這將嘗試在第一CATEGORY節點的name屬性訪問不存在的屬性。

所以,你想中檢索所有CATEGORY節點的name屬性值,或所有CATEGORY節點,也許只有擁有name屬性那些CATEGORY節點?

所有CATEGORY節點:

foreach($xml->CREATED->CATEGORY as $category) 
{ 
    echo $category['name'] . '<br />'; 
} 

只有CATEGORY節點名稱屬性:

foreach($xml->xpath('//CATEGORY/@name') as $name) 
{ 
    echo $name . '<br />'; 
} 

只有有一個名字屬性CATEGORY節點:

foreach($xml->xpath('//CATEGORY[@name]') as $category) 
{ 
    echo $category['name'] . '<br />'; 
} 
+0

完美!非常感謝!所有CATEGORY節點的代碼都是我正在尋找的,您的解釋幫助我理解了這種工作方式。 –

+1

有一點值得補充的是,如果除了回顯結果之外的任何事情,請記住在遍歷XML之後轉換爲字符串(例如'$ my_category_list [] =(string)$ category ['name']; ),否則你會繞過SimpleXML對象,這可能會產生不良後果。 – IMSoP

相關問題