使用PHP从具有相同名称的XML元素中获取值

时间:2010-02-04 16:53:39

标签: php xml simplexml

我在获取所有3个IMAGE元素的值时遇到问题,因为它们具有相同的名称。下面是我的xml提要

<FOUND>
    <IMAGES>
    <IMAGE>
      <SMALL>images/small.jpg</SMALL> 
      <MED>images/med.jpg</MED> 
      <LARGE>images/large.jpg</LARGE> 
      <EXTRAL>images/extra.jpg</EXTRAL> 
    </IMAGE>
    <IMAGE>
      <SMALL>images1/small.jpg</SMALL> 
      <MED>images1/med.jpg </MED> 
      <LARGE>images1/large.jpg</LARGE> 
      <EXTRAL>images1/extra.jpg</EXTRAL> 
    </IMAGE>
    <IMAGE>
      <SMALL>images2/small.jpg</SMALL> 
      <MED>images2/med.jpg </MED> 
      <LARGE>images2/large.jpg</LARGE> 
      <EXTRAL>images2/extra.jpg</EXTRAL> 
    </IMAGES>
</FOUND>

我在php中编写了一个函数,它将返回第一个块。

function images($id){

$xml=simplexml_load_file("feed.xml");


    foreach ($xml->FOUND->IMAGES as $image)
{
    $imagearr[]=array(

    'small'=>$image->IMAGE->SMALL,
    'med'=>$image->IMAGE->MEDIUM,
    'large'=>$image->IMAGE->LARGE,
    'xl'=>$image->IMAGE-> EXTRAL,



    );

}
return $imagearr;
    }

如何获取所有3个IMAGE元素?我需要将返回值用于下面的html表

<table width="200" border="1">
  <tr>
    <td>small</td>
    <td>medium</td>
    <td>large</td>
  </tr>
  <tr>
    <td>small</td>
    <td>medium</td>
    <td>large</td>
  </tr>
  <tr>
    <td>small</td>
    <td>medium</td>
    <td>large</td>
  </tr>
</table>

非常感谢任何帮助

2 个答案:

答案 0 :(得分:3)

我会使用xPath返回一个数组。

试试这个:

$xml = simplexml_load_file('feed.xml');

$results = $xml->xpath('//IMAGE');

var_dump($results);

输出......

array(3) {
  [0]=>
  object(SimpleXMLElement)#2 (4) {
    ["SMALL"]=>
    string(16) "images/small.jpg"
    ["MED"]=>
    string(14) "images/med.jpg"
    ["LARGE"]=>
    string(16) "images/large.jpg"
    ["EXTRAL"]=>
    string(16) "images/extra.jpg"
  }
  [1]=>
  object(SimpleXMLElement)#3 (4) {
    ["SMALL"]=>
    string(17) "images1/small.jpg"
    ["MED"]=>
    string(16) "images1/med.jpg "
    ["LARGE"]=>
    string(17) "images1/large.jpg"
    ["EXTRAL"]=>
    string(17) "images1/extra.jpg"
  }
  [2]=>
  object(SimpleXMLElement)#4 (4) {
    ["SMALL"]=>
    string(17) "images2/small.jpg"
    ["MED"]=>
    string(16) "images2/med.jpg "
    ["LARGE"]=>
    string(17) "images2/large.jpg"
    ["EXTRAL"]=>
    string(17) "images2/extra.jpg"
  }
}

然后,您可以使用类似

的内容迭代结果
foreach($results as $row)
{
 print $row->SMALL;
}

希望有所帮助

答案 1 :(得分:-1)

要坚持使用原始的PHP代码,你可以试试这样的东西:

$xml=simplexml_load_file("feed.xml");

$imagearr= array();
foreach ($xml->IMAGES->IMAGE as $image)
{
   $imagearr[]=array(
     'small'=>$image->SMALL,
     'med'=>$image->MEDIUM,
     'large'=>$image->LARGE,
     'xl'=>$image->EXTRAL);
}
return $imagearr;