2015-09-27 70 views
0

好日子,PHP DOM得到整个节点

我努力实现以下目标: 随着DOM我想一个页面

内获取所有HTML列表我很想有将是:

$Result = array(
        '<ul class="MyClass"> 
         <li><a href="#">link1</a></li> 
         <li><a href="#">link2</a></li> 
         <li><a href="#">link3</a></li> 
        </ul>', 
        '<ul class="MySubMenu"> 
         <li><a href="#">Sublink1</a></li> 
         <li><a href="#">Sublink2</a></li> 
         <li><a href="#">Sublink3</a></li> 
        </ul>' 
        ); 

我尝试这样做: 但我只能得到它的属性。

而且已经回到了我想是完整的:

<ul class="MyClass"> 
    <li><a href="#">link1</a></li> 
    <li><a href="#">link2</a></li> 
    <li><a href="#">link3</a></li> 
</ul> 

目前,我得到了下面。但我没有比这更进一步。 在网上搜索只提供了我的子信息,而不是整个元素。

 ///######## GET ALL IMAGES WITH XPath 
     $objects  = $this->dom->getElementsByTagName('ul'); 

     ///######## RUN THROUGH ALL SET NODES 
     foreach($objects as $node){ 
      exit(print_r($node)); 

I hope that someone knows how I should approach this issue. 
TIAD! 

At this point I am starting to think it is not really possible what I want. 

我试图通过使用爆炸来解决它。

这是我的方法解决这个问题:

///########------------------------------------------------------------- 
    ///########------------------------------------------------------------- 
    ///######## FUNCTION TO GET THE TAG BLOCK 
    ///########------------------------------------------------------------- 
    ///########------------------------------------------------------------- 
    private function GetTagBlock($tpl, $tag, $end = false){ 
     ///######## IF IT IS THE START TAG 
     if($end === true){ 
      ///######## GET THE LAST ELEMENT 
      $Part1 = explode('<'.$tag, $tpl, 2); 
      $tpl = '<'.$tag.$Part1[1].'</'.$tag.'>'; 
     } 
     ///######## GET THE LAST ELEMENT 
     else{ 
      ///######## SETUP AN EMPTY RETURN ARRAY 
      $Part1 = explode(strrev('</'.$tag.'>'), strrev($tpl), 2); 
      ///######## EXECUTE A MAPPER 
      $Part1 = array_map('strrev', $Part1); 
      ///######## SET THE TPL 
      $tpl = $Part1[1]; 
     } 
     ///######## IF IT CONCERNS THE START TAG 
     if($end === false){ 
      ///######## CALL ITSELF 
      $tpl = $this->GetTagBlock($Part1[1], $tag, true); 
     } 




     ///########================================================== 
     ///######## RETURN THE MODIFIED TEMPLATE 
     ///########================================================== 
     return($tpl); 
     ///########================================================== 
    } 

回答

0

试试这个

$objects  = $this->dom->getElementsByTagName('ul'); 
    $ret=array(); 
    foreach($objects as $node){ 
    $ret[]=$node->ownerDocument->saveHTML($node) 
    } 
    var_dump($ret);