PHP xpath – 查找带有值的元素,并获取元素前后的元素

可以说我有这个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] 
最佳答案
用这个:

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

转载注明原文:PHP xpath – 查找带有值的元素,并获取元素前后的元素 - 代码日志