0

我有以下 HTML 段,

HTML 部分的屏幕截图,其中 xPath 查询未返回锚 <a> 标记列表

我在 PHP 中使用 xPath 和 DOM 使用以下 xPath 查询获取 DIV 中的所有锚标记:

//div[@id="breadcrumbs"]/a

我希望上面的查询应该返回所有锚标记的 NodeList,在上面的 HTML 的情况下应该是 3。我什么也没得到,我的以下 PHP 代码正在跳过

        $breadCrumb = $xpath->query('//div[@id="breadcrumbs"]/a');      

    if($breadCrumb->length){
        $ctr = 0;
        $sections = "";
        foreach($breadCrumb as $section){
            //$productBreadCrumb['section_'.$ctr] =  $section->nodeValue;
            $sections .=  $section->nodeValue."|";
            $ctr++;
        }
        $productData['sections'] = $sections;
    }

我需要这里的指导。非常感谢。

编辑:在上述 Div id="breadcumbs"> aaa 段上添加了我试图基于 xPath 查询从 DOM 获取的页面

http://www.5starhookah.com/Apex-Black-NEW-A342.htm

谢谢

谢谢

4

2 回答 2

4

xpath 的常见问题:命名空间。

<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

意味着每个标签实际上都在http://www.w3.org/1999/xhtml命名空间中。

查找文档以查看您是否可以设置默认命名空间,或者是否可以为其设置别名(例如,如果别名名称为“x”,则查询将类似于 //x:div[@id="breadcrumbs"]/x :一个 。

或者,您可以通过在解析 xml 之前删除字符串 « xmlns="http://www.w3.org/1999/xhtml" » 来作弊。

于 2012-04-26T23:00:08.023 回答
2

您的 XPath 是正确的,您可以看到您是否使用示例 XHTML,例如:

<div id="breadcrumbs">
<a class='breadcrumb'>Our Products</a>
</div>

使用如下工具: http ://www.xpathtester.com/

因此,您的问题一定出在 DOM 上。如果您可以在运行 XPath 之前粘贴 DOM 的 XHTML 的打印输出,我们可以确认这一点,但似乎很清楚,除非真的很奇怪,否则您的问题出在 DOM 上。

于 2012-04-26T21:17:46.073 回答