PHP Dom XPath - Почему это не работает? - PullRequest
2 голосов
/ 16 декабря 2011

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

Я пытаюсь получить (в массиве) всех заголовков тем здесь .

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

Я использую:

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

Однако ничего не получается

Ответы [ 3 ]

2 голосов
/ 16 декабря 2011

Причина, по которой вы не получаете никаких результатов, заключается в том, что нет элементов <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>

Как видите, ни один из них не содержит "font-weight: bold" "в атрибуте стиля.

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

0 голосов
/ 16 декабря 2011

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

0 голосов
/ 16 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...