Içeriğinden dizi oluşturma

5 Cevap php

Ben bir değişken $html atanmış bir web sayfasının içeriğini var

İşte içeriğinin bir örnek $html:

<div class="content">something here</div>
<span>something random thrown in <strong>here</strong></span>
<div class="content">more stuff</div>

PHP kullanarak I (yukarıdaki örneğin) bu gibi <div class="content"></div> bölgelerin öylesine içeriğini bulduğu bir dizi oluşturabilirsiniz nasıl:

echo $array[0] . "\n" . $array[1]; //etc

çıkışlar

something here
more stuff

5 Cevap

Bu OP sadece basitleştirilmiş bir durumda ve gerçek durum daha karmaşıktır varsayarsak, XPath kullanmak isteyeceksiniz.

It gerçekten karmaşık ise, o zaman (DOMXPath ile) DOMDocument kullanmak isteyebilirsiniz, ama burada SimpleXML kullanarak basit bir örnek

$xml = new SimpleXMLElement($html);

$result = $xml->xpath('//div[@class="content"]');

while(list( , $node) = each($result)) {
    echo $node,"\n";
}

Açıkça bu bir dizi oluşturma hakkında sordu yana, siz kullanabilirsiniz:

$res_Arr = array();
while(list( , $node) = each($result)) {
    $res_Arr[] = $node;
}

ve $res_Arr aradığınız içeriği ile bir dizi olacaktır.

http://php.net/manual/en/simplexmlelement.xpath.php php SimpleXML XPath bilgi için ve http://www.w3.org/TR/xpath XPath özellikler için bkz

Orada değil çok sen dize manipülasyonlar işlevi veya düzenli ifadeler kullanarak kısa yapabilirsiniz. Eğer DOM kütüphane kullanarak XML olarak HTML yüklemek ve div hareket için kullanabilirsiniz, ancak dikkatli ya değilse yapısı karmaşık ise o hantal hale yapabilirsiniz.

http://ca3.php.net/manual/en/book.dom.php

Kalem13 beni yenmek gibi görünüyor, ama ben katılmıyorum. Sen DOMDocument sınıfını kullanabilirsiniz. Ben şahsen kullanılmış değil, ama sizin için işe yarayacağını düşünüyorum. Önce o zaman loadHTML() fonksiyonunu kullanarak $ html değişken yük, bir DOMDocument nesnesi örneğini. Sonra getElementsByTagName() işlevini kullanabilirsiniz.

PHP DomDocument and SimpleXML . See Parse HTML With PHP And DOM işleme de dahil olmak üzere çeşitli HTML araçları vardır. İşte bir örnek:

$dom = new DomDocument; 
$dom->loadHTML($html); 
$dom->preserveWhiteSpace = false; 
$divs = $dom->getElementsByTagName('div'); 
foreach ($divs as $div) {
  $class = $div->getAttribute('class');
  if ($class == 'content') {
    echo $div->nodeValue . "\n";
  }
}

Kullanmak isteyebilirsiniz böylece teknik sınıf özniteliği birden çok sınıfları olabilir:

$classes = explode(' ', $class);
if (in_array('content', $classes)) {
  ...
}

SimpleXML / XPath yaklaşım daha kısa ama XPath yol gitmek (ve görevlerin bu tür yapmak için yeterli en azından başka bir teknoloji, öğrenme) istemiyorsanız daha sonra yukarıda bir programatik alternatiftir.