Bağlantıların PHP dizi bağlantıları (iç içe) HTML Sırasız liste dönüştürmek

1 Cevap php

Ben bağlantıların düzenli, iç içe geçmiş HTML Sırasız liste var ve ben PHP ile kazıyın ve bir diziye dönüştürmek istiyorum.

Orijinal liste şöyle:

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

Öğelerin herhangi bir çocuk sahibi olabilir.

(Gerçek ekran kazıma bunu yapabilirim, bir sorun değildir.)

Ben listenin hiyerarşik doğasını tutarken, sadece bağlantıları, bir PHP diziye bu açmak istiyorum. Herhangi bir fikir?

Ben htmlsimpledom hem sözdizimi gibi jQuery kullanmak phpQuery, kullanarak baktım. Ama sözdizimi doğru almak gibi olamaz. Ben tüm bağlantıları alabilirsiniz, ama ben hiyerarşik doğasını ve düzeni kaybetme sonunda.

Teşekkürler.

1 Cevap

Çizgisinde DOMDocument ve SimpleXMLElement kullanın:

$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 bir SimpleXMLElement $ olarak bağlantıları ilave ediliyor ise, dize yakalamak için ob_start ve ob_clean kullanın.

Cheat sheet for xpath queries (pdf)