Я пытаюсь получить доступ к атрибуту предыдущего брата, но это сложно.Правильный синтаксис XPath
Так что в основном веб-страница, которую я пытаюсь очистить, является TERRIBLE, а теги привязки используют crappy onclick вместо href. Глупо, я знаю. Я пытаюсь сначала найти тег привязки, содержащий onclick, с window.open('servletLinkJunkHere...')
, затем перейдите к предыдущему родному брату, который является тегом img
, и извлеките из него атрибут src
.
<IMG SRC="images/warning.gif" ALT="blah blah blah" STYLE="position:relative;top:2px;cursor:help;">
<a href="#" onclick="javascript:window.open('servletLinkJunkHere...')>
И вот я XPath пытается использовать:
$url_pre = 'a[onclick*="'servletLinkJunkHere...'"]/preceding-sibling::img/@src';
Любые идеи о том, как я могу это сделать? Я знаю, что это возможно, я просто не полностью разбираюсь в xpath-запросах. Кроме того, есть ли хорошие ресурсы для изучения всех укромных уголков и трещин xpath? Благодаря!
EDIT: Это то, что у меня есть, но похоже, что он ничего не возвращает, кроме пустого массива.
$url_email = "EditNotificationInfoServlet?cb=on&id=" . $id . "&sessionId=1";
$url_pre = "a[contains(@onclick,'" . $url_email . "')]/preceding-sibling::IMG/@SRC";
$final_text = $crawler->filterXPath($url_pre)->each(function($crawler, $i) {
return $crawler->text();
});
Каков контекст для '$ crawler'? Вам может потребоваться префикс выражения XPath с помощью '//' – Phil
Это функция, и я передаю ей объект '$ crawler'. У меня есть много других функций, и они работают очень хорошо, поэтому контекст должен быть прекрасным. – Kenny
Извините, я имел в виду контекст документа. Если контекст документа для '$ crawler-> filterXPath' не является непосредственным родителем вашего элемента HTML' ', вы его не найдете. Использование '// a [содержит (...' будет искать весь документ из любого контекста, который у него есть – Phil