xPath查询未按预期工作。 Nodelist为空

时间:2012-04-26 19:26:46

标签: php html xml xpath domdocument

我有以下HTML细分,

Screen Shot of HTML Section where xPath query is not returning list of anchor <a> tags

我在PHP中使用带有DOM的xPath,使用以下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”&gt;段上添加了基于xPath查询从DOM获取的页面。 a a a

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

感谢

感谢

2 个答案:

答案 0 :(得分: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:a。

或者你可以在解析xml之前删除字符串«xmlns =“http://www.w3.org/1999/xhtml”»作弊。

答案 1 :(得分:2)

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

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

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

因此,您的问题必须与DOM有关。如果您可以在运行XPath之前粘贴DOM XHTML的打印输出,我们可以确认这一点,但似乎很清楚,除非有些非常奇怪,否则您的问题就在于DOM。