Есть ли способ создать собственный DOMNodeList? Например:
$doc = new DOMDocument(); $elem = $doc->createElement('div'); $nodeList = new DOMNodeList; $nodeList->addItem($elem); // ?
Моя идея – расширить класс DOMDocument, добавив некоторые полезные методы, которые возвращают данные как DOMNodeList.
Можно ли это сделать, не написав мою собственную версию класса DOMNodeList?
Вы не можете добавлять элементы в DOMNodeList через открытый интерфейс . Однако DOMNodeLists являются живыми коллекциями при подключении к дереву DOM, поэтому добавление дочернего элемента в DOMElement добавит элемент в дочернюю коллекцию этого элемента (который является списком DOMNodeList):
$doc = new DOMDocument(); $nodelist = $doc->childNodes; // a DOMNodeList echo $nodelist->length; // 0 $elem = $doc->createElement('div'); $doc->appendChild($elem); echo $nodelist->length; // 1
Вы говорите, что хотите добавить «некоторые полезные методы, которые возвращают данные как DOMNodeList». В контексте DOMDocument это то, что делает XPath . Он позволяет запрашивать все узлы в документе и возвращать их в DOMNodeList. Возможно, это то, что вы ищете.