2015-04-29 2 views
-1

Я пытаюсь получить доступ к атрибуту предыдущего брата, но это сложно.Правильный синтаксис 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(); 
}); 
+0

Каков контекст для '$ crawler'? Вам может потребоваться префикс выражения XPath с помощью '//' – Phil

+0

Это функция, и я передаю ей объект '$ crawler'. У меня есть много других функций, и они работают очень хорошо, поэтому контекст должен быть прекрасным. – Kenny

+0

Извините, я имел в виду контекст документа. Если контекст документа для '$ crawler-> filterXPath' не является непосредственным родителем вашего элемента HTML' ', вы его не найдете. Использование '// a [содержит (...' будет искать весь документ из любого контекста, который у него есть – Phil

ответ

2

Я думаю, вам нужно использовать следующее: XPath

a[contains(@onclick,'servletLinkJunkHere...')]/preceding-sibling::IMG/@SRC 
+0

Я пробовал ваш код, не повезло. Возможно, я сделал это неправильно. Я отредактировал мой оригинальный вопрос и разместил точный код, который у меня есть, может быть, это может помочь точно настроить мою ошибку. – Kenny

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