XML DOMXPath Поиск - PullRequest
       23

XML DOMXPath Поиск

1 голос
/ 16 мая 2011
<?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, как я могу получить последнюю категорию одного элемента без повторения?я пытаюсь:

<?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 );

Но возвращаем:

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

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

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

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

)

мне нужно вернуть последнего кота 1 + другие предметы

1 Ответ

2 голосов
/ 16 мая 2011

Следующий XPath должен выбрать последний элемент каждой категории в документе

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