假设我有这个XML:
<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之后的元素。这就是我可以获取上一个/下一个功能的数据以及在页面上显示所选图像。我以为这会做到这一点:
$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]
答案 0 :(得分:7)
使用此:
$project = $xml_object->xpath("//photo[filename='$image_id']");