有没有办法创建我自己的 DOMNodeList? 例如:
$doc = new DOMDocument();
$elem = $doc->createElement('div');
$nodeList = new DOMNodeList;
$nodeList->addItem($elem); // ?
我的想法是扩展 DOMDocument 类,添加一些有用的方法,将数据作为 DOMNodeList 返回。
是否可以在不编写我自己的 DOMNodeList 类版本的情况下做到这一点?
您无法通过其公共接口将项目添加到 DOMNodeList。但是,DOMNodeList 在连接到 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 中返回它们。也许这就是你要找的。