php get meta tags




如何在PHP中迭代DOM元素? (3)

我有一個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標記,獲取特定的barpub ,並從那裡獲取值。 現在,我如何迭代foo以便仍然可以按名稱訪問特定的子節點?


使用FluidXML您可以非常輕鬆地查詢和迭代XML。

$data = [];

$store_child = function($i, $fooChild) use (&$data) {
    $data[] = [ $fooChild->nodeName => $fooChild->nodeValue ];
};

fluidxml($dom)->query('//foo/*')->each($store_child);

FluidXML


使用XPath查詢文檔通常比編寫依賴於文檔結構知識的代碼要好得多。 有兩個原因。 首先,測試和調試的代碼要少得多。 其次,如果文檔的結構發生變化,更改XPath查詢要比更改一堆代碼容易得多。

當然,你必須學習XPath,但(大多數)XPath不是火箭科學。

PHP的DOM使用xpath_eval方法執行XPath查詢。 它here ,用戶註釋包括一些非常好的示例。


這是另一種(懶惰)方式。

$data[][$node->nodeName] = $node->nodeValue;




dom