2011-06-08 54 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

相关问题