在PHP中使用XPath获取href属性

时间:2015-06-06 09:23:42

标签: php xpath domdocument

我是PHP的新手,并试图为网站编写一个剪贴簿。

我正在尝试获取具有类名称类别的元素。我用了

$showPage = '<li class="categories">Categories<ul>  <li class="cat-item cat-item-940"><a href="http://www.desitvbox.me/category/star-plus/amul-taste-of-india/" >Amul Taste of India</a>
</li>
    <li class="cat-item cat-item-942"><a href="http://www.desitvbox.me/category/star-plus/dance-plus/" >Dance Plus</a>
</li>
    <li class="cat-item cat-item-239"><a href="http://www.desitvbox.me/category/star-plus/diya-aur-baati-hum-star/" >Diya Aur Baati Hum</a>
</li>
    <li class="cat-item cat-item-745"><a href="http://www.desitvbox.me/category/star-plus/suhani-si-ek-ladki/" >Suhani Si Ek Ladki</a>
</li>
    <li class="cat-item cat-item-147"><a href="http://www.desitvbox.me/category/star-plus/star-plus-completed-shows/" >Star Plus Completed Shows</a>
<ul class="children">
    <li class="cat-item cat-item-772"><a href="http://www.desitvbox.me/category/star-plus/star-plus-completed-shows/airlines/" >Airlines</a>
</li>
    <li class="cat-item cat-item-518"><a href="http://www.desitvbox.me/category/star-plus/star-plus-completed-shows/arjun/" >Arjun</a>
</li>
    <li class="cat-item cat-item-237"><a href="http://www.desitvbox.me/category/star-plus/star-plus-completed-shows/chef-pankaj-ka-zayka/" >Chef Pankaj Ka Zayka</a>
</li>
</ul>
</li>
</ul></li>';   
$dom = new DOMDocument();
$dom->validateOnParse = true;
$dom->loadHTML($showPage);  
$dom->preserveWhiteSpace = false;

$allShowsList = new DOMXPath($dom);
$allShowsTableHTML = $allShowsList->query('//li[contains(@class, "categories")]'); 

但是,我想现在读取$ allShowsTableHTML中提到的所有href的值。

你能告诉我该怎么办?

正如你所看到的,记录中也有ul class ='childern'。我也想读。

我需要获得href和标题。

我试过以下但没有结果。

$allShowTableDom = new DOMDocument();
foreach ($allShowTableHTML as $showLink)
{
    $allShowTableDom->appendChild($allShowTableDom->importNode($showLink,true));
} 
$showsArray = $allShowsTableHTML->getElementsByTagName('a');

我认为它不会进入foreach循环。

1 个答案:

答案 0 :(得分:0)

要获取超链接的所有href属性,请添加更多轴步骤,最后遍历结果列表,其中->value属性将包含URI。

鉴于您可以将所有href个属性转储到整个<li>元素中,只需按//a/@href扩展您的查询:

$document = new DOMXPath($dom);
$hrefs = $document->query('//li[contains(@class, "categories")]//a/@href'); 

foreach ($hrefs as $href) {
  echo $href->value;
}

如果这包含您不想获取的节点,您还可以下载包含未排序列表并选择更具体的查询:

//li[contains(@class, "categories")]/ul/li/a/@href