如何使用php simpleXML获取多个XML元素属性

时间:2012-10-09 13:45:43

标签: php xml simplexml

我有这个XML

<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

获取Category - 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; 
}

然而,这会返回致命错误:在非对象上调用成员函数attributes()

有什么想法吗? 谢谢。

1 个答案:

答案 0 :(得分:5)

CATEGORY节点嵌套在CREATED节点内,因此您需要在那里访问它,访问CATEGORY['name']->attributes()毫无意义,因为这会尝试访问非第一个name节点的CATEGORY属性的现有属性。

那么您是想要检索所有CATEGORY个节点或所有CATEGORY个节点的名称属性值,还是仅查找具有CATEGORY属性的name个节点的名称属性值?

所有CATEGORY个节点:

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

只有CATEGORY个节点名称属性:

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

仅具有name属性的CATEGORY个节点:

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