Как получить адреса всех конечных узлов Dom на странице. PHP + Simple HTML DOM.

Тема в разделе "PHP", создана пользователем jabbaxatt, 24 авг 2013.

Модераторы: latteo
  1. jabbaxatt

    jabbaxatt Добрый модератор

    Moderator
    Регистр.:
    21 янв 2009
    Сообщения:
    878
    Симпатии:
    411
    Инструмент PHP + Simple HTML DOM

    Действия и цель:
    1) Имеется HTML документ.

    2) Нужно обойти все конечные узлы Dom дерева, проверить их на некое условие и если "Да" то получить адрес (формулу, Xpath) для доступа к этому узлу.

    Вопросы:
    1) Для доступа к конечным узлам Dom (т.е. узлам не содержащим вложенных в них HTML тегов) нужно самому писать цикл обхода всего Dom дерева? Если да - то хотелось бы примеры циклов для такого обхода, если нет - то какой способ лучше?

    2) Как с помощью Simple HTML DOM получить получить адрес (формулу, Xpath) этого самого конечного узла? Для того, чтобы на другой странице сразу найти аналогичный узел. И какие при этом вероятны проблемы (Пока вижу только то что узлы-братья по этому Xpath не получится различать.)
     
  2. antonio85

    antonio85 Создатель

    Регистр.:
    26 сен 2012
    Сообщения:
    13
    Симпатии:
    5
    Для более эффективной навигации по дереву документа доступны методы:

    $e->children ( [int $index] ) Возвращает объект N-го прямого потомка, если индекс установлен, в противном случае возвращает массив всех дочерних элементов
    $e->parent() Возвращает родительский элемент.
    $e->first_child() Возвращает первый дочерний элемент, или null, если ничего не найдено
    $e->last_child() Возвращает последний дочерний элемент, или null, если ничего не найдено
    $e->next_sibling() Возвращает следующий родственный элемент, или null, если ничего не найдено
    $e->prev_sibling() Возвращает предыдущий родственный элемент, или null, если ничего не найдено

    Небольшой пример есть здесь и на хабре.
    ЗЫ: сейчас тоже ковыряю эту библиотеку..
     
    jabbaxatt нравится это.
  3. esche

    esche

    Регистр.:
    9 авг 2009
    Сообщения:
    360
    Симпатии:
    243
    Есть встроенный http://php.net/manual/en/domnode.getnodepath.php
    А братьев по номеру [] различать.
     
    jabbaxatt нравится это.