Вопрос по PHP, DOM, Xpath, Firebug, Firepath

12
G
На сайте с 20.07.2008
Offline
85
2529

Здравствуйте. Задам несколько вопросов:

1. В Firebug можно копировать путь Xpath наведя мышь на определенный элемент, также есть и Firepath(дополнение к Firebug) в нем тоже можно копировать путь Xpath. И почему то их пути отличаются, почему?

2. В php пишу следующий код:

$dom = new DOMDocument();

@$dom->loadHTML($content);

//echo $dom->saveHTML(); Все выводит

$xpath = new DomXPath($dom);

$elements = $xpath->query(".//*[@id='content']/div[1]/div[1]/div[2]/ul/li[1]");

if ($elements!=null)

{

foreach ($elements as $e)

{

echo $e->nodeValue;

}

}

echo $e->nodeValue; Выводит то что нужно, при этом путь .//*[@id='content']/div[1]/div[1]/div[2]/ul/li[1] копировался c Firepath.

Если же копировать путь Xpath с Firebug и до того же элемента так: /html/body/form/div[3]/div[4]/div/div[3]/div/div/div[2]/ul/li то echo $e->nodeValue; ничего не выводит, почему?

Вроде бы пока все, спасибо.

ДП
На сайте с 23.11.2009
Offline
203
#1

Конкретно за ваш случай не скажу, но в firebug'е показывает уже интерпретированный браузером html (например, он может добавлять tbody к таблицам, хотя в ответе сервера их нет).

Плюс к одному элементу можно, как правило, обратиться разными способами, особенно если у его родителей есть атрибуты id,class.

N
На сайте с 06.05.2007
Offline
419
#2
Garf:
1. В Firebug можно копировать путь Xpath наведя мышь на определенный элемент, также есть и Firepath(дополнение к Firebug) в нем тоже можно копировать путь Xpath. И почему то их пути отличаются, почему?

когда firefox строит свое дерево, он дополняет некоторые пропущенные верстальщиком теги. TBODY наиболее часто встречается.

При обработке того же html из php дополнения не происходит. Так что смотри в код и экспериментируй.

Кроме firepath есть xpather http://xpath.alephzarro.com/. Мне больше нравится.

Кнопка вызова админа ()
G
На сайте с 20.07.2008
Offline
85
#3

Для чего тогда вообще сделали в Firebug копировать пути Xpath, если они в php не работают?

И почему тогда в Firepath пути в php работают хорошо? В чем фокус?

N
На сайте с 06.05.2007
Offline
419
#4

ну вот такая вот особенность.

в других вариантах верстки странички все будет работать нормально.

G
На сайте с 20.07.2008
Offline
85
#5

netwind, Такую особенность явно просто так не делали. :)

Народ, может еще кто ответит на предыдущий вопрос по конкретнее? Интересно просто.

N
На сайте с 06.05.2007
Offline
419
#6

ну так если в браузере просто не хранится другого варианта дерева, кроме исправленного, то какое же еще выражение получится? firefox вот уже много лет ведет неравную битву с потреблением памяти, а ты хочешь чтобы они еще и дерево дополнительное хранили.

если кто-то знает браузер или способ быстро выделять xpath без достроенных тегов - расскажите очень полезно было бы.

G
На сайте с 20.07.2008
Offline
85
#7

netwind, Просто я не понимаю зачем в Firebug сделали опцию копировать путь Xpath, если он один фиг не работает в php, для чего? И странно то, что путь от firepath работает, ведь он то тоже берет все из построенного дерева браузером.

N
На сайте с 06.05.2007
Offline
419
#8

Garf, все там работает и в firebug тоже. это сделали для других нормальных случаев верстки.

Ты вообще пытался изучать xpath или по гуглу программы пишешь? сравнивал эти два выражения?

Выражение полученное в firepath начинающееся с символов "//" - вообще другое по смыслу. оно пропустит достроенные теги и приведет тебя к нужной выборке.

выражение от firebug - полное от корня дерева и строгое не пропускающее ни одного тега, в том числе и достроенных.

dom-парсер в php вообще не знает зачем нужны эти теги и зачем может понадобиться их дополнять. Он просто работает с html как xml.

сейчас проверил этот firepath - не особо удобно в качестве инструмента для парсинга сайтов, когда нужно выдирать не один элемент, а наборы элементов. но выражения строит хорошие.

и, кстати, там есть опция Generate absolute XPath - будет выдавать точно такое же нерабочее в php выражение как и в firebug.

C
На сайте с 28.01.2010
Offline
70
#9
Garf:
Для чего тогда вообще сделали в Firebug копировать пути Xpath, если они в php не работают?
И почему тогда в Firepath пути в php работают хорошо? В чем фокус?

Первый раз слышу мнение, что функция копирования пути нужна для пхп ))

Это - личная подпись. Здесь обычно ставят ссылки на всякие кривые сайты, надеясь получить "жирный бек".
G
На сайте с 20.07.2008
Offline
85
#10

netwind,

Выражение полученное в firepath начинающееся с символов "//" - вообще другое по смыслу

С этим я согласен.

и, кстати, там есть опция Generate absolute XPath - будет выдавать точно такое же нерабочее в php выражение как и в firebug.

Тоже соглашусь, так как протестировал и не работает.

/*все там работает и в firebug тоже. это сделали для других нормальных случаев верстки. .*/

На нескольких сайтах попробовал абсолютные пути Xpath с файрбага и все равно не работает. Для какой верстки "нормальной" это сделано я хз. Все равно не ясно, зачем в Firebug и Firepath сделан абсолютный путь Xpath. То что Firepath строит другие пути, то это радует, потому, что это работает. И тоже напрашивается вопрос, почему абсолютный путь в пхп не работает, а другой путь работает, хоть по идеи браузер сам строит свой дом?

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий