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

发布于 2024-08-20 03:06:16 字数 1775 浏览 6 评论 0原文

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

<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>

任何帮助将不胜感激

I have a problem in getting the values from all the 3 IMAGE elements coz they have the same name. Below is my xml feed

<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>

I have written a function in php that will return the first block.

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;
    }

How do I get to grab all the 3 IMAGE elements? I need to use the returned value in to the below html table

<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>

Any help will be much appreciated

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浊酒尽余欢 2024-08-27 03:06:16

我会使用 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;
}

希望之类的内容迭代结果,这会有所帮助

I would use xPath to return an array.

Try this:

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

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

var_dump($results);

Output ...

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"
  }
}

You'll then be able to iterate over the results with something like

foreach($results as $row)
{
 print $row->SMALL;
}

Hope that helps

草莓味的萝莉 2024-08-27 03:06:16

为了坚持原来的 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;

to stick a bit more with you original php code, you could try something like this:

$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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文