Nasıl PHP DOMDocument kullanarak birinci seviyede düğümlerini almak için?

2 Cevap php

Ben PHP DOM nesnesine yeni ve ben bir çözüm bulamıyorum bir sorun var. Ben aşağıdaki HTML ile bir DOMDocument var:

<div id="header">
</div>
<div id="content">
    <div id="sidebar">
    </div>
    <div id="info">
    </div>
</div>
<div id="footer">
</div>

I need to get all nodes that are on first level (header, content, footer). hasChildNodes() does not work, because first level node may not have children (header, footer). For now my code looks like:

$dom = new DOMDocument();
$dom -> preserveWhiteSpace = false;
$dom -> loadHTML($html);
$childs = $dom -> getElementsByTagName('div');

Ama bu bana bütün div bulunuyor alır. herhangi bir tavsiye?

2 Cevap

Sen dışarıda DOMDocument gitmek zorunda olabilir - belki SimpleXML veya DOMXPath dönüştürmek

$file = $DOCUMENT_ROOT. "test.html";
$doc = new DOMDocument();
$doc->loadHTMLFile($file);

$xpath = new DOMXpath($doc);
$elements = $xpath->query("/");

İşte bu durumda ilk seviye elemanları (bir tablo satırında üst düzey TD elemanları kapmak nasıl:

$doc = new DOMDocument();
$doc->preserveWhiteSpace = false;
$doc->loadHTML( $tr_element );

$xpath = new DOMXPath( $doc );
$td = $xpath->query("//tr/td[1]")->item(0);

do{
   if( $innerHTML = self::DOMinnerHTML( $td ) )
     array_push( $arr, $innerHTML );
   $td = $td->nextSibling;
} while( $td != null );

$ Dizi artık alacağı üst TD unsurları, ancak iç içe değil, masa TDS içeriyor

$dom->getElementsByTagName( 'td' );

DOMinnerHTML işlevi Ben bir element / düğümü innerHTML almak için bir yere budaklı bir şeydir:

public static function DOMinnerHTML( $element, $deep=true ) 
{ 
  $innerHTML = ""; 
  $children = $element->childNodes; 
  foreach ($children as $child) 
  { 
    $tmp_dom = new DOMDocument(); 
    $tmp_dom->appendChild( $tmp_dom->importNode( $child, $deep ) ); 
    $innerHTML.=trim($tmp_dom->saveHTML()); 
  } 
  return $innerHTML; 
}