2011-06-08 82 views
6

可以說我有這個XML還可以得到元素:PHP的XPath - 一個價值發現元素,前後元素

<images> 
    <photo> 
     <thumbImg>images/thumbs/002.jpg</thumbImg> 
     <filename>002</filename> 
    </photo> 
    <photo> 
     <thumbImg>images/thumbs/008.jpg</thumbImg> 
     <filename>008</filename> 
    </photo> 
    <photo> 
     <thumbImg>images/thumbs/003.jpg</thumbImg> 
     <filename>003</filename> 
    </photo> 
    <photo> 
     <thumbImg>images/thumbs/006.jpg</thumbImg> 
     <filename>006</filename> 
    </photo> 
    <photo> 
     <thumbImg>images/thumbs/005.jpg</thumbImg> 
     <filename>005</filename> 
    </photo> 
</images> 

而且我想找到的003名值的元素,然後找到元素1之前和元素之後1。這就是爲什麼我可以獲得prev/next功能的數據以及在頁面上顯示選定的圖像。我想這會做到這一點:

$image_id = "003"; 
$project = $xml_object->xpath("photo[filename='$image_id']"); 

但它的print_r是一個空數組...是否有使用XPath一個簡單的方法也許做到這一點?我認爲我可以通過循環遍歷並將prev/next元素放入臨時數組中,然後一旦找到它,打破循環並返回臨時數據,但我認爲xpath可能能夠做得更多一點典雅。

編輯:解決了 - 這裏是爲兄弟節點的更清晰的答案:

// for the one prior 
//photo[filename='$image_id']/preceding-sibling::photo[1] 
// for the one after 
//photo[filename='$image_id']/following-sibling::photo[1] 

回答

7

使用此:

$project = $xml_object->xpath("//photo[filename='$image_id']"); 
+0

真棒,那工作 - 你將如何得到一個和下一個元素呢? – jpea 2011-06-08 13:40:38

+1

'$ project = $ xml_object-> xpath(「// photo」); (list(,$ node)= each($ project)){var_dump($ node); '會遍歷整個循環。 – Femi 2011-06-08 13:46:41

+0

對不起,澄清 - 我將如何去獲取單個元素之前和單個元素之後,並非所有的照片元素 – jpea 2011-06-08 13:49:45

相關問題