2011-05-16 66 views
1
<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <channel> 
      <item> 
       <category>Cat1</category> 
      </item> 
      <item> 
       <category>Cat1</category> 
      </item> 
      <item> 
       <category>Cat2</category> 
      </item> 
      <item> 
       <category>Cat3</category> 
      </item> 
    </channel>  
</root> 

我有这个xml,我如何得到一个项目的最后一个类别没有重复? 我想:XML DOMXPath搜索

<?php 
     $DOMDocument = new DOMDocument('1.0', 'utf-8'); 
     $DOMDocument->preserveWhiteSpace = false; 
     $DOMDocument->load('xml.xml'); 
     $DOMXPath = new DOMXPath($DOMDocument); 
     foreach($DOMXPath->query('.//channel/item/category[last()]/parent::node()') as $Nodes){ 
       foreach($Nodes->childNodes as $Node){ 
          $RSS[ $Node->nodeName ] = $Node->nodeValue; 
       } 
       $RSSContents[] = $RSS; 
     } 
     echo '<pre>'; 
     print_r($RSSContents); 

但retorning:

Array 
(
    [0] => Array 
     (
      [category] => Cat1 
     ) 

    [1] => Array 
     (
      [category] => Cat1 
     ) 

    [2] => Array 
     (
      [category] => Cat2 
     ) 

    [3] => Array 
     (
      [category] => Cat3 
     ) 

) 

我需要最后的猫的1个+其他项目

+0

你是什么意思“我需要返回最后的猫1 +其他项目” – Gordon 2011-05-16 15:12:56

+0

得到最后一个分类:我有{cat1,cat1(last),cat2,cat3}需要返回{cat1(last),cat2,cat3} – XML4Parse 2011-05-16 15:14:18

回答

2

返回以下XPath应在文档中选择每个类别的最后一个项目

/root/channel/item[not(category = following::category)] 
+0

坦克,这个完美的作品 – XML4Parse 2011-05-16 16:59:02

+0

不客气。如果这解决了您的问题,我会很感激,如果您可以通过点击旁边的复选标记图标勾选答案。也显示其他人已经解决了。谢谢。 – Gordon 2011-05-16 17:02:46