如何将PHP DOMElement转换为PHP DOMNodeList

时间:2016-12-19 03:40:48

标签: php xml dom domdocument

我有一种情况,我有一个像下面这样的小功能......

public function childUpdate($nodes, $newValue) {
    //Update values of each node
    foreach ($nodes as $child) {
        $child->nodeValue = $newValue;
    }
}

每当我的功能发送DOMNodeList时,此功能都可以正常运行,但有时可以发送DOMElement

这是一个问题,因为在这种情况下,foreach ($nodes as $child) {行失败,因为foreach无法对单个元素起作用,并且需要列表。

所以我的问题是 - 是否有一种优雅的方法可以快速将DOMElement转换为DOMNodeList而只包含其中的一个元素?

显而易见的第一个想法是将DOMElement包装在像array(DOMElement)这样的数组中,虽然这适用于上面的这个函数,但在我依赖DOMNodeList的其他情况下它会失败具体功能。

DOMElement转换为DOMNodeList的简单方法可以简化我的代码并移除大量的" if'元素'这样做,这个'列表'做那个"条件。

2 个答案:

答案 0 :(得分:0)

遇到同样的问题。

建议来自: How to add elements to DOMNodeList in PHP?

创建DOMDocument,向其添加DOMElement,并获取作为DOMNodeList的childNodes

if(!property_exists($data,'length')) {
  $doc = new DOMDocument();
  $elem = $doc->importNode($data);
  $doc->appendChild($elem);
  $nodeList = $doc->childNodes;
}

答案 1 :(得分:0)

如果文档具有DOMXPath,则可以使用

 $nodeList = $xpath->query(".", $node);