【问题标题】:How to get nodes in first level using PHP DOMDocument?如何使用 PHP DOMDocument 获取第一级节点?
【发布时间】:2009-10-08 20:40:00
【问题描述】:

我是 PHP DOM 对象的新手,遇到一个问题,我找不到解决方案。我有一个带有以下 HTML 的 DOMDocument:

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

我需要获取第一级的所有节点(页眉、内容、页脚)。 hasChildNodes() 不起作用,因为第一级节点可能没有子节点(页眉、页脚)。 现在我的代码看起来像:

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

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

【问题讨论】:

    标签: php dom


    【解决方案1】:

    您可能不得不离开 DOMDocument - 可能转换为 SimpleXML 或 DOMXpath

    $file = $DOCUMENT_ROOT. "test.html";
    $doc = new DOMDocument();
    $doc->loadHTMLFile($file);
    
    $xpath = new DOMXpath($doc);
    $elements = $xpath->query("/");
    

    【讨论】:

      【解决方案2】:

      这是我如何抓取第一级元素(在本例中,是表格行中的顶级 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 元素,但不包含您可以从中获得的嵌套表 TD

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-28
        • 1970-01-01
        • 1970-01-01
        • 2011-08-18
        • 2018-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多