Php 正确的XPath语法

Php 正确的XPath语法,php,xpath,domcrawler,Php,Xpath,Domcrawler,我正在尝试访问以前兄弟姐妹的属性,但事实证明这很困难 因此,基本上,我试图刮的网页很糟糕,锚标记使用蹩脚的onclick而不是href。愚蠢,我知道。我试图首先通过窗口找到包含onclick的锚标记。open('servletLinkJunkHere…'),然后移动到前一个同级,它是img标记,并从中提取src属性 <IMG SRC="images/warning.gif" ALT="blah blah blah" STYLE="position:relative;top:2px;curs

我正在尝试访问以前兄弟姐妹的属性,但事实证明这很困难

因此,基本上,我试图刮的网页很糟糕,锚标记使用蹩脚的onclick而不是href。愚蠢,我知道。我试图首先通过
窗口找到包含onclick的锚标记。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查询。另外,是否有学习xpath的所有细节的好资源?谢谢

编辑:这就是我所拥有的,但它似乎只返回一个空数组

$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();
});

我认为您需要使用以下xpath:

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

我试过你的密码,运气不好。也许我做错了。我编辑了我的原始问题,并发布了我的确切代码,如果这可能有助于调整我的错误的话。
$crawler
的上下文是什么?您可能需要在XPath表达式前面加上
/
,这是一个函数,我给它传递了一个
$crawler
对象。我有很多其他功能,它们工作得很好,所以上下文应该很好。对不起,我指的是文档上下文。除非
$crawler->filterXPath
的文档上下文是HTML
元素的直接父元素,否则您将找不到它。使用
//a[contains(…
将从任何上下文搜索整个文档mm,我也尝试了
//a[contains…
,但它似乎没有提供一个有效的解决方案。继续研究。也许只需尝试
//a/previous sibling::img
甚至
//a
,看看您得到了什么
a[contains(@onclick,'servletLinkJunkHere...')]/preceding-sibling::IMG/@SRC