2015-06-06 66 views
1

我是PHP新手,試圖爲網站編寫一個刮板。在PHP中使用XPath獲取href屬性

我想要獲取具有類名稱類別的元素。我用

$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提到A HREF的值。

你能告訴我該怎麼做?

正如你可以看到一個記錄也有ul class ='childern'。我也想閱讀。

我需要獲取href和標題。

我在下面試過但沒有結果。

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

我認爲這不是在foreach循環。

+0

請查看XPath和XQuery的區別。您正在使用XPath,XQuery是一個超集,並且本機不受PHP支持。 –

回答

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 
+0

感謝您的回答。它工作完美。你還可以建議,我怎樣才能得到「a」標籤的標題。即。鏈接的名稱,如「Suhani Si Ek Ladki」...真的很感謝你的幫助。 –

+0

請看看[FAQ],我們並不是真的不喜歡不立即關聯後續問題。無論如何:您將不得不刪除'@ href'軸步驟並使用PHP的DOM來訪問這兩個屬性。 –

+0

對不起。非常感謝你的幫助 –