[英]How do I iterate through DOM elements in PHP?
我有一個XML文件加載到DOM文檔中,我希望迭代所有'foo'標記,從它下面的每個標記獲取值。 我知道我可以通過
$element = $dom->getElementsByTagName('foo')->item(0);
foreach($element->childNodes as $node){
$data[$node->nodeName] = $node->nodeValue;
}
但是,我正在嘗試做的是來自XML,
<stuff>
<foo>
<bar></bar>
<value/>
<pub></pub>
</foo>
<foo>
<bar></bar>
<pub></pub>
</foo>
<foo>
<bar></bar>
<pub></pub>
</foo>
</stuff>
迭代每個foo標記,獲取特定的bar或pub ,並從那里獲取值。 現在,我如何迭代foo以便仍然可以按名稱訪問特定的子節點?
沒有測試,但是怎么樣:
$elements = $dom->getElementsByTagName('foo');
$data = array();
foreach($elements as $node){
foreach($node->childNodes as $child) {
$data[] = array($child->nodeName => $child->nodeValue);
}
}
使用XPath查詢文檔通常比編寫依賴於文檔結構知識的代碼要好得多。 有兩個原因。 首先,測試和調試的代碼要少得多。 其次,如果文檔的結構發生變化,更改XPath查詢要比更改一堆代碼容易得多。
當然,你必須學習XPath,但(大部分)XPath不是火箭科學。
PHP的DOM使用xpath_eval
方法執行XPath查詢。 它在此處記錄 ,用戶注釋包括一些非常好的示例。
這是另一種(懶惰)方式。
$data[][$node->nodeName] = $node->nodeValue;
使用FluidXML,您可以非常輕松地查詢和迭代XML。
$data = [];
$store_child = function($i, $fooChild) use (&$data) {
$data[] = [ $fooChild->nodeName => $fooChild->nodeValue ];
};
fluidxml($dom)->query('//foo/*')->each($store_child);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.