[英]How to get a child of PHP DOMDocument by index
我想要一個PHP DOMDocument的孩子。 假設我有一個這樣的DOM文檔:
<div>
<h1 ></h1>
<div id=2></div>
<div class="test"></div>
...
</div>
我有一個索引號3.然后我需要得到元素<div class="test"></div>
。 在DOMDocument API中,沒有像children(3)
這樣的方法。 在那兒? 我怎樣才能讓一個有索引的孩子?
您可以使用childNodes
。 這是DOM元素的一個屬性,它包含一個包含所有元素子節點的NodeList。 理想情況下,您可以執行$el->childNodes->item(2)
(請注意,它基於0,而不是基於1,因此2是第三項)。 但是,這包括文本節點。 因此很難預測您的節點將是多少。 這可能不是最好的解決方案。
你可以使用alexn的解決方案 ( getElementsByTagName('*')->item(2)
),但這又有它的缺點。 如果您的節點有子節點,它們也將包含在選擇中。 這可能會導致您的計算失敗。
我首選的解決方案是使用XPath:它可能是最穩定的解決方案,並不是特別難。
您需要在某處創建一個帶有$xpath = new DOMXPath($document)
的XPath對象,其中$document
是您的DOMDocument實例。 我將假設$el
是父div節點,我們正在搜索的“上下文”。
$node = $x->query('*', $el)->item(2);
請注意,我們再次使用基於0的索引來查找選擇中的哪個元素。 在這里,我們只查看頂級div
子節點, *
僅選擇元素節點,因此不需要使用文本節點進行計算。
如果使用DOMDocument,則可以使用getElementsByTagName('*')
返回包含文檔中所有元素的DomNodeList。 然后,您可以調用以索引作為參數的item
函數:
$nodes = $dom->getElementsByTagName('*');
$targetNode = $nodes->item(3);
試試這個
foreach($dom->getElementsByTagName('div') as $div) {
$class = $div->getAttribute('class');
}
現在,您可以匹配該特定div的class或id屬性,並執行任何操作。 這不是解決方案,但可以幫助您找到所有div的內容和屬性。 希望能幫助到你。
試試這個:
$dom->childNodes->item(3)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.