PHP'nin HTML DOMDocument ile HTML ayrıştırmak

2 Cevap php

Ben "getElementsByTagName" ile bunu yapmaya çalışıyor, ama çalışma değildi, ben burada bazı tür fokes DOMEDocument için daha iyi olacağını söyledi düne kadar regex kullanmak için kullanılır gibi, HTML ayrıştırmak için DOMDocument kullanarak yeniyim iş, bu yüzden bir deneyin veriyorum :)

Ben (yine sınıf ile değil), bazı açıklar ama yardımcı bir şey bulamadık arıyor etrafında bir süre için google

Yani böylece "bu metni 1. Capture" yakalamak ve "bu metin 2 Yakalama" ve istiyorum.

Zor görünmüyor, ama ben bunu anlamaya olamaz: (

<div class="main">
    <div class="text">
    Capture this text 1
    </div>
</div>

<div class="main">
    <div class="text">
    Capture this text 2
    </div>
</div>

2 Cevap

: Eğer almak istiyorsanız

  • Metin
  • Bu class="text" ile <div> etiketi içeride
  • Bu, kendisi bu, a <div> ile içinde class="main"

Belirli bir ad (while you only want some of them) tüm etiketleri dönecekleri - Ben kolay yolu kullanmak için değil DOMDocument::getElementsByTagName olduğunu söyleyebilirim.

Bunun yerine, DOMXpath sınıfını kullanarak, belge üzerinde bir XPath sorgusu kullanabilirsiniz.


For example, something like this should do, to load the HTML string into a DOM object, and instance the DOMXpath class :

$html = <<<HTML
<div class="main">
    <div class="text">
    Capture this text 1
    </div>
</div>

<div class="main">
    <div class="text">
    Capture this text 2
    </div>
</div>
HTML;

$dom = new DOMDocument();
$dom->loadHTML($html);

$xpath = new DOMXPath($dom);


And, then, you can use XPath queries, with the DOMXPath::query method, that returns the list of elements you were searching for :

$tags = $xpath->query('//div[@class="main"]/div[@class="text"]');
foreach ($tags as $tag) {
    var_dump(trim($tag->nodeValue));
}


And executing this gives me the following output :

string 'Capture this text 1' (length=19)
string 'Capture this text 2' (length=19)

Sen kullanabilirsiniz http://simplehtmldom.sourceforge.net/

O kolayca div etiketinin içeriğini getirebilir hangi, php yazılı DOM ayrıştırıcı kullanımı kolay çok basittir.

Böyle bir şey:

/ / Id = metninden hangi tüm bul

$ Ret = $ html-> find ('div [id = metin]');

Daha fazla yardım için bunun belgelerine bakın.