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] 
6
задан hakre 20 June 2013 в 07:39
поделиться