我有以下HTML细分,
我在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”>段上添加了基于xPath查询从DOM获取的页面。 a a a
http://www.5starhookah.com/Apex-Black-NEW-A342.htm
感谢
感谢
答案 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。