2014-11-29 16 views
5

C'è un modo per creare il mio DOMNodeList? Es .:Come aggiungere elementi a DOMNodeList in PHP?

$doc = new DOMDocument(); 
$elem = $doc->createElement('div'); 
$nodeList = new DOMNodeList; 
$nodeList->addItem($elem); // ? 

La mia idea è di estendere classe DOMDocument l'aggiunta di alcuni metodi utili che restituiscono dati come DOMNodeList.

È possibile farlo senza scrivere la mia versione della classe DOMNodeList?

risposta

3

Non è possibile aggiungere articoli a DOMNodeList tramite il numero public interface. Tuttavia, DOMNodeLists sono raccolte dal vivo quando collegato ad un albero DOM, in modo da aggiungere un elemento figlio a un DOMElement aggiungerà un elemento della collezione figlio che di elemento (che è un DOMNodeList):

$doc = new DOMDocument(); 
$nodelist = $doc->childNodes; // a DOMNodeList 
echo $nodelist->length;  // 0 

$elem = $doc->createElement('div'); 
$doc->appendChild($elem); 

echo $nodelist->length;  // 1 

Tu dici che vuoi aggiungere "alcuni metodi utili che restituiscono dati come DOMNodeList". Nel contesto di DOMDocument, questo è ciò che fa XPath. Permette di interrogare tutti i nodi nel documento e restituirli in un DOMNodeList. Forse è quello che stai cercando.

+0

Grazie per la risposta, risolve il problema. Sto lavorando a un prototipo di mini-libreria che aggiunge il supporto CSS alla classe DOMDocument. Esegue compiti specifici come la ricerca del colore di sfondo visibile di un'immagine con trasparenza (attraverso l'accesso al CSS del suo elemento e nodi parent). Proverò XPath, una volta trovato un convertitore decente di selettori CSS in XPath. – optimizitor

+0

@optimizitor nota che ci sono librerie di terze parti che hanno già questo. Vedi http://stackoverflow.com/a/3577662/208809 – Gordon

+0

Diciamo che il 'DOMNode $ elem' è preso dal codice HTML caricato, c'è un modo per salvare il suo contesto (' parentNode', 'previousSibling',' nextSibling ')? Cambia quando viene applicato 'DOMNode :: appendChild (DOMNode $ elem)'. – optimizitor

Problemi correlati