Bu DOM ile ortak bir sorun var: Eğer bir etiketin içeriği almak istiyorsanız biraz daha fazla iş yapmak zorunda, ve tüm çocukların içeriği.
Temel olarak, onların içeriğini almak için, XPath sorgusu ile eşleşen ettik birinin alt düğümler üzerinde döngü var.
DOMElement
sınıfına -- see this note a> manuel sayfasında tek tek kullanıcı notları önerilen bir çözüm var.
Integrating this solution into the code you already have should give you something that looks like this for the declaration of the HTML string, with sub-tags :
$html = <<<HTML
<div class="main">
<div class="text">
<p>
Capture this <strong>text</strong> <em>1</em>
</p>
<p>
And some other <strong>text</strong>
</p>
</div>
</div>
HTML;
And, to extract the data from that HTML string, you can use something like that :
$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$tags = $xpath->query('//div[@class="main"]/div[@class="text"]');
foreach ($tags as $tag) {
$innerHTML = '';
// see http://fr.php.net/manual/en/class.domelement.php#86803
$children = $tag->childNodes;
foreach ($children as $child) {
$tmp_doc = new DOMDocument();
$tmp_doc->appendChild($tmp_doc->importNode($child,true));
$innerHTML .= $tmp_doc->saveHTML();
}
var_dump(trim($innerHTML));
}
Değişti tek şey foreach
döngünün içeriği: yerine sadece kullanarak $tag->nodeValue
, sen alt öğeler üzerinde yinelemek zorunda.
Which gives me the following output :
string '<p>
Capture this <strong>text</strong> <em>1</em>
</p>
<p>
And some other <strong>text</strong>
</p>' (length=150)
Hangi eşleşmiş <div>
etiketi, ve tüm çocukların tam içeriği - etiketler dahil.
Note : there are often interesting ideas and solution in the users notes of the manual ;-)