我有一种情况,我有一个像下面这样的小功能......
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'元素'这样做,这个'列表'做那个"条件。
答案 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);