如何使用php获取XML节点的属性值?

时间:2013-12-18 19:05:53

标签: php

我有一个XML数据存储在php中的$string变量中,就像这样

<DATA>
<STOREITEMS>
  <CREATED date="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>
  <CREATED date="Wed Oct 10 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>
<DATA>

我需要使用php

打印节点的日期

我尝试过以下代码

$xml = new SimpleXMLElement($string);

$result = $xml->xpath("//DATA/STOREITEMS");

foreach ($result as $node) {
    echo $node->CREATED["date"];
    echo "<br>";
}

但它总是只返回

 Tue Oct 9 5:30:01 BST 2012 

为什么它不会像

那样返回
Tue Oct 9 5:30:01 BST 2012 
Wed Oct 10 5:30:01 BST 2012

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

$result是一个列表(只有一个商店项目),因此您的foreach只会循环一次,而它所引用的CREATED是第一个孩子。

试试这个:

$xml = new SimpleXMLElement($string);

$result = $xml->xpath("//DATA/STOREITEMS/CREATED"); // note the change

foreach ($result as $node) {
    echo $node["date"]; // note the change
    echo "<br />";
}