Запрос xPath не работает должным образом. Список узлов пуст

У меня есть следующий сегмент HTML,

Снимок экрана раздела HTML, где запрос xPath не возвращает список тегов привязки ‹a›

Я использую xPath в PHP с DOM для извлечения всех тегов привязки внутри DIV, используя следующий запрос xPath:

//div[@id="breadcrumbs"]/a

Я ожидаю, что приведенный выше запрос должен вернуть NodeList всех тегов привязки, которых должно быть 3 в случае указанного выше HTML. Я ничего не получаю, и мой следующий PHP-код пропускает

        $breadCrumb = $xpath->query('//div[@id="breadcrumbs"]/a');      

    if($breadCrumb->length){
        $ctr = 0;
        $sections = "";
        foreach($breadCrumb as $section){
            //$productBreadCrumb['section_'.$ctr] =  $section->nodeValue;
            $sections .=  $section->nodeValue."|";
            $ctr++;
        }
        $productData['sections'] = $sections;
    }

Здесь мне нужно руководство. Очень признателен.

РЕДАКТИРОВАТЬ: добавлена ​​страница, которую я пытаюсь получить из DOM на основе запроса xPath в вышеупомянутом сегменте Div id = "breadcumbs"> a a a

http://www.5starhookah.com/Apex-Black-NEW-A342.htm

Благодарность

Благодарность


person Wikki    schedule 26.04.2012    source источник
comment
Вы уверены, что блок div не создается Javascript?   -  person Lev Khomich    schedule 26.04.2012
comment
Когда я просматриваю исходный код страницы из браузера и вижу HTML, там также появляется Div с тегами привязки. Я предполагаю, что если бы он был сгенерирован JavaScript, тогда View Source не должен был отображать DIV и a a HTML. Это правильное предположение?   -  person Wikki    schedule 26.04.2012


Ответы (2)


Обычная проблема с xpath: пространство имен.

<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

означает, что каждый тег фактически находится в пространстве имен http://www.w3.org/1999/xhtml .

Просмотрите документацию, чтобы узнать, можете ли вы установить пространство имен по умолчанию или указать его псевдоним (например, если псевдонимом является "x", запрос будет выглядеть как // x: div [@ id = "breadcrumbs"] / x : а.

В качестве альтернативы вы можете обмануть, удалив строку «xmlns =" ​​http://www.w3.org/1999/xhtml "» перед синтаксическим анализом xml.

person vincent    schedule 26.04.2012

Ваш XPath правильный, как вы можете видеть, если используете образец XHTML, например:

<div id="breadcrumbs">
<a class='breadcrumb'>Our Products</a>
</div>

с помощью такого инструмента, как: http://www.xpathtester.com/

Следовательно, ваша проблема должна быть связана с DOM. Если бы вы могли вставить распечатку XHTML DOM непосредственно перед запуском XPath, мы могли бы это подтвердить, но кажется довольно очевидным, что, если не считать чего-то действительно странного, ваша проблема связана с DOM.

person machineghost    schedule 26.04.2012