2011-12-16 2 views
2

Я весь день возился с материалом DOM XPath - читал и рвал мои волосы! Итак, в крайнем случае, спросите вас, ребята, плюсы!PHP Dom XPath - Почему он не работает?

То, что я пытаюсь сделать, это получить (в массиве) all the titles of threads here.

Я пытаюсь использовать XPath для этого (если кто-то не сможет сказать мне лучший способ); В настоящее время я просто пытаюсь получить только один титул, чтобы проверить, работает ли мой код (явно не ...!)

Я использую:

$list3 = $xpath3 
    ->evaluate("//a[contains(@style, 'font-weight:bold') and 
    contains(@href, 'showthread.php?t=3499047')]"); 

Однако ничто не становится извлекаться

+0

Темы, которые вы прочитали (т.е. следующие ссылки), больше не выделены, это проблема? – AakashM

+0

Я думаю, что выражение жестко, вы можете попытаться удалить предложение стиля? И сравнение href меняется на '? T = 3499047' без пути – ajreal

ответ

2

Причина, по которой вы не получаете никаких результатов, состоит в том, что нет элементов <a>, которые удовлетворяют обоим условиям.

Эти ссылки, содержащие «3499047» в @href:

<a href="showthread.php?s=9bc55ab5990282a5353fb20d505d577e&amp;t=3499047" id="thread_title_3499047">Tesco misprices and discussion (Thread 12)</a> 
<a href="showthread.php?s=9bc55ab5990282a5353fb20d505d577e&amp;t=3499047">1</a> 
<a href="showthread.php?s=9bc55ab5990282a5353fb20d505d577e&amp;t=3499047&amp;page=2">2</a> 
<a href="showthread.php?s=9bc55ab5990282a5353fb20d505d577e&amp;t=3499047&amp;page=3">3</a> 
<a href="showthread.php?s=9bc55ab5990282a5353fb20d505d577e&amp;t=3499047&amp;page=110">Last Page</a> 
<a href="member.php?s=9bc55ab5990282a5353fb20d505d577e&amp;find=lastposter&amp;t=3499047" rel="nofollow">ExiledCockney</a> 
<a href="misc.php?do=whoposted&amp;t=3499047" onclick="who(3499047); return false;">2,184</a> 
<a rel="shadowbox;width=732;height=527;player=iframe;" href="wow.php?t=3499047" target="_blank" style="display: block; width: 100%; height: 100%; cursor: pointer;"> 
     <div style="width: 100%; height: 100%; background-image: url('http://images2.moneysavingexpert.com/images/forum_style_2/misc//wow_big_faint_grey.gif');"> 
      <div style="padding: 12px 0px 0px 0px;"> 
       <strong>3</strong> 
      </div> 
     </div> 
    </a> 

Как вы можете видеть, ни один из них не содержит «" начертание шрифта: жирный»в атрибут стиля.

В случае, если разметка на странице содержит элементы с желаемой комбинацией при просмотре в браузере, они могут быть добавлены через javascript. DOM не запускает JavaScript, поэтому вам нужно проверить разметку с DOM.

+0

Ах, да, я получаю совершенно другой источник HTML. Это произойдет потому, что я вошел в систему - поэтому я вижу полужирный шрифт. Благодаря! Это действительно модный момент. –

+0

У меня теперь есть работа (с использованием атрибута id) - большое спасибо! Другой быстрый вопрос - есть ли способ потянуть значение t = xxxxxxxx? например выше t = 3499047 –

+0

@cud использует 'parse_url' значение @href. Если в строке запроса есть несколько аргументов, используйте 'parse_str'. – Gordon

0

Убедитесь, что DOM не работает на html. это ОЧЕНЬ разборчиво по поводу искаженного html. Посмотрите, что вызывает вызов ->saveHTML() сразу после загрузки страницы. Если вы выбрали что-то другое/усеченное, ваш ввод искажен и его нужно будет сначала очистить.

+0

Это не ОЧЕНЬ разборчиво. – Gordon

0

Я взглянул на этот html, и я не вижу никаких ссылок с этим href, которые также имеют style="font-weight: bold;". На самом деле я не вижу смелых ссылок на странице. Во всяком случае, когда я удаляю это условие, я получаю пять DOMElements от evaluate().

Смежные вопросы