2010-04-11 54 views
0

我有一個規則的,嵌套的HTML無序鏈接列表,我想用PHP刮掉它並將其轉換爲數組。轉換一個(嵌套的)HTML無序的鏈接列表鏈接到PHP數組鏈接

原來的名單看起來是這樣的:

<ul> 
<li><a href="http://someurl.com">First item</a> 
    <ul> 
    <li><a href="http://someotherurl.com/">Child of First Item</a></li> 
    <li><a href="http://someotherurl.com/">Second Child of First Item</a></li> 
    </ul> 
</li> 
<li><a href="http://bogusurl.com">Second item</a></li> 
<li><a href="http://bogusurl.com">Third item</a></li> 
<li><a href="http://bogusurl.com">Fourth item</a></li> 
</ul> 

任何項目都可以有孩子。

(實際的屏幕抓取是沒有問題的,我能做到這一點。)

我想變成一個PHP數組,只是鏈接,同時保持列表的層次性。有任何想法嗎?

我看過使用htmlsimpledom和phpQuery,它們都使用jQuery語法。但是,我似乎無法得到正確的語法。我可以獲得所有的鏈接,但最終我失去了層次性和秩序。

謝謝。

回答

0

使用DOM文檔和的SimpleXMLElement線沿線的:

$doc = new DOMDocument(); 
$doc->loadHTML($html); 
$xmlStr = $doc->saveXml($doc->documentElement); 

$xml = new SimpleXmlElement($xmlStr); 

$links = array(); 

foreach ($xml->xpath('//a') as $li) { 
    $links[] = $li->attributes()->href; 
} 

如果HREF被添加到$鏈接作爲一個SimpleXMLElement,使用ob_start和ob_clean捕捉到的字符串。

Cheat sheet for xpath queries(pdf)

+0

謝謝,這會得到所有的鏈接,但它會失去嵌套! – Klark 2010-04-11 15:33:15

+0

有一種方法可以使用SimpleXmlElement來做到這一點,但我無法回答我的頭。試着看一下該課程的PHP手冊。 – Danten 2010-04-11 16:27:15