2010-04-11 6 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

Использование DOMDocument и 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

+0

Там будет способ сделать это с помощью SimpleXmlElement, но я не могу ответить на макушку. Попробуйте взглянуть на руководство PHP для класса. – Danten

Смежные вопросы