簡體   English   中英

如何從DOMDocument獲取所有子節點?

[英]How to get all child nodes from DOMDocument?

我有以下內容

$string = '<html><head></head><body><ul id="mainmenu">
  <li id="1">Hallo</li>
  <li id="2">Welt
    <ul>
      <li id="3">Sub Hallo</li>
      <li id="4">Sub Welt</li>
    </ul>
  </li>
</ul></body></html>';
$dom = new DOMDocument;
$dom->loadHTML($string);

現在我想在一個數組中包含所有li ID。
我嘗試了以下方法:

$all_li_ids = array();
$menu_nodes = $dom->getElementById('mainmenu')->childNodes;
foreach($menu_nodes as $li_node){
    if($li_node->nodeName=='li'){
        $all_li_ids[]=$li_node->getAttribute('id');         
    }
}
print_r($all_li_ids);

如您所見,這將打印出來[1,2]

我如何得到所有孩子(子女孩[1,2,3,4] )?

一種方法是添加另一個foreach循環,即:

foreach($menu_nodes as $node){
    if($node->nodeName=='li'){
        $all_li_ids[]=$node->getAttribute('id');         
    }
    foreach($node as $sub_node){
        if($sub_node->nodeName=='li'){
            $all_li_ids[]=$sub_node->getAttribute('id');         
        }
    }
}

我的測試沒有使用$dom->getElementById('mainmenu')返回元素。 但是,如果你的使用,請不要使用Xpath

$xpath = new DOMXPath($dom);
$ul = $xpath->query("//*[@id='mainmenu']")->item(0);

$all_li_ids = array();
// Find all inner li tags
$menu_nodes = $ul->getElementsByTagName('li');
foreach($menu_nodes as $li_node){
        $all_li_ids[]=$li_node->getAttribute('id');         
}
print_r($all_li_ids); 1,2,3,4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM