使用php跳过xml feed中的某些对象

时间:2010-02-06 17:32:59

标签: php xml xpath object

我正在使用php xpath从下面的xml feed和php函数中获取值。

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

function img ($id){

    $xml=simplexml_load_file("feed1.xml");
    //$xml=simplexml_load_string($string);
    if (!$xml) {
    trigger_error("There was an error",E_USER_ERROR);
    }

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

    }

以上只是部分代码cz,feed非常庞大..我想知道是否有办法只抓取第一个和第三个图像对象块,跳过第二个块并显示剩余的图像块?< / p>

我有一个单独的巨大的xml feed与上面的feed非常相似,它就像80个图像对象块。所以我想在每10个块之后显示一条消息。我是怎么做到的?

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:3)

要获得第一个和第三个块,您可以这样做:

//IMAGE[position() == 1 || position() == 3]

获得例如你可以做的每10个元素:

//IMAGE[position() mod 10 == 0]

请参阅:XPath function reference

我不太确定在每个10块之后显示一条消息是什么意思,但你可以这样做:

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

foreach($images as $key => $image) {
    // do whatever you want to do with the image 
    if($key % 10 == 9) {
        echo 'Some message';
    }  
}

答案 1 :(得分:0)

有关XPath语法的详细信息,请访问http://www.w3schools.com/xpath/xpath_syntax.asp

并且......由于xpath()返回一个数组,也许你可以在foreach()循环中做更复杂的操作。