根節點以下元件的第一電平可以與
$dom->documentElement->childNodes
要訪問的的childNodes屬性包含一個DOMNodeList
,您可以使用foreach
進行迭代。
見DOMDocument::documentElement
這是一種便捷屬性,該屬性允許是文檔的文檔元素的子節點的直接訪問。
和DOMNode::childNodes
一個包含此節點的所有孩子的DOMNodeList。如果沒有孩子,這是一個空的DOMNodeList。
由於childNodes
是DOMNode
性能的任何類擴展DOMNode
(這是大多數在DOM類的)具有這種屬性,所以要得到一個DOMElement
以下元素的第一個層次是訪問一個DOMElement的childNode財產。
注意,如果無效HTML或部分文件使用DOMDocument::loadHTML()
,HTML解析器模塊將增加一個HTML框架HTML和body標籤,所以在DOM樹,在您的示例HTML將
<!DOCTYPE html … ">
<html><body><div id="header">
</div>
<div id="content">
<div id="sidebar">
</div>
<div id="info">
</div>
</div>
<div id="footer">
</div></body></html>
您在遍歷或使用XPath時必須考慮到這一點。因此,使用
$dom = new DOMDocument;
$dom->loadHTML($str);
foreach ($dom->documentElement->childNodes as $node) {
echo $node->nodeName; // body
}
只會迭代<body>
一個DOMElement節點。知道libxml將添加框架,您必須遍歷<body>
元素的childNodes以從示例代碼中獲取div元素,例如
$dom->getElementsByTagName('body')->item(0)->childNodes
但是,這樣做也將考慮任何空白節點,所以你要麼必須確保設置preserveWhiteSpace
以虛假或查詢正確的元素nodeType如果你只是想獲得DOMElement
節點,例如
foreach ($dom->getElementsByTagName('body')->item(0)->childNodes as $node) {
if ($node->nodeType === XML_ELEMENT_NODE) {
echo $node->nodeName;
}
}
或使用XPath
$dom->loadHTML($str);
$xpath = new DOMXPath($dom);
foreach ($xpath->query('/html/body/*') as $node) {
echo $node->nodeName;
}
其他信息: