2010-09-02 47 views
3

我從來沒有問過這裏的問題,所以請原諒我的問題,如果它的格式不好或不夠具體。我只是一個涉獵者,對PHP和XPath知之甚少。PHP SimpleXML XPath獲取下一個父節點

我有一個這樣的XML文件:

<catalogue> 
<item> 
    <reference>A1</reference> 
    <title>My title1</title> 
</item> 
<item> 
    <reference>A2</reference> 
    <title>My title2</title> 
</item> 
</catalogue> 

我拉使用SimpleXML此文件:

$file = "products.xml"; 
$xml = simplexml_load_file($file) or die ("Unable to load XML file!"); 

然後我使用從URL參數參考,以獲取有關額外的細節'item'使用PHP:

foreach ($xml->item as $item) { 
if ($item->reference == $_GET['reference']) { 
echo '<p>' . $item->title . '</p>'; 
} 

因此,從URL如www.mysite.com/file.php?reference=A1

我會得到這個HTML:

<p>My title1</p> 

我意識到我可能沒有這樣做的權利,並改善這種歡迎任何指針。

我的問題是,我想找到下一個和上一個'項目'的細節。如果我從網址知道reference = A1,我如何找到下一個'item'的引用,標題等?如果我只有「A1」,我知道這是一個參考節點,如何獲取HTML這樣的:

<p>Next item is My title2</p> 

我看了一下下面的同胞,但我不知道如何使用它。我只能找到參考節點的以下兄弟,這不是我所需要的。

任何幫助表示讚賞。

回答

3

你可以使用:

/catalogue/item[reference='A1']/following-sibling::item[1]/title 

含義:catalogue根元素的item子元素,有,navegate先下兄弟item元素的title孩子「A1」字符串值reference元素。

+0

好答案(+1)。 – 2010-09-02 13:02:57

+0

謝謝你,它完美的作品。 – Hayley 2010-09-02 15:13:33

+0

@Hayley Easton:我很高興它一直很有幫助。 – 2010-09-02 15:25:17

2

我可能使用xpath來獲取下一個/上一個(和當前)節點。

<?php 

error_reporting(E_ALL^E_NOTICE); 

$s = ' 
<catalogue> 
<item> 
    <reference>A1</reference> 
    <title>My title1</title> 
</item> 
<item> 
    <reference>A2</reference> 
    <title>My title2</title> 
</item> 
<item> 
    <reference>A3</reference> 
    <title>My title3</title> 
</item> 
</catalogue> 
'; 

$xml = simplexml_load_string($s); 
$reference = 'A3'; 

list($current) = $xml->xpath('/catalogue/item[reference="' . $reference . '"]'); 

if($current) { 
    print 'current: ' . $current->title . '<br />'; 

    list($prev) = $current->xpath('preceding-sibling::*[1]'); 

    if($prev) { 
     print 'prev: ' . $prev->title . '<br />'; 
    } 

    list($next) = $current->xpath('following-sibling::*[1]'); 

    if($next) { 
     print 'next: ' . $next->title . '<br />'; 
    } 
} 

請參閱文檔SimpleXMLElement::xpathXPath syntax文檔。

+0

感謝您的回答,這對我有效,但我最終使用了第一個響應。我發現你的解決方案也一樣。 – Hayley 2010-09-02 15:15:57