如何使用PHP DOMDocument获取第一级节点?

如何使用PHP DOMDocument获取第一级节点?,php,dom,Php,Dom,我不熟悉PHPDOM对象,有一个问题我找不到解决方案。我有一个包含以下HTML的文档: <div id="header"> </div> <div id="content"> <div id="sidebar"> </div> <div id="info"> </div> </div> <div id="footer"> </div> 但这让我

我不熟悉PHPDOM对象,有一个问题我找不到解决方案。我有一个包含以下HTML的文档:

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

但这让我得到了所有的div。有什么建议吗?

您可能需要跳出DOMDocument-可能需要转换为SimpleXML或DOMDxpath

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

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

您可能需要跳出DOMDocument,可能需要转换为SimpleXML或DOMDxpath

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

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

下面是我如何获取第一级元素(在本例中,表行中的顶级TD元素:

$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 );
$arr现在包含顶部的TD元素,但不包含您将从中获得的嵌套表TDs

$dom->getElementsByTagName( 'td' );
DOMinnerHTML函数是我在某个地方遇到的,用于获取元素/节点的innerHTML:

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

下面是我如何获取第一级元素(在本例中,表行中的顶级TD元素:

$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 );
$arr现在包含顶部的TD元素,但不包含您将从中获得的嵌套表TDs

$dom->getElementsByTagName( 'td' );
DOMinnerHTML函数是我在某个地方遇到的,用于获取元素/节点的innerHTML:

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