2014-11-29 28 views
5

Czy istnieje sposób utworzenia własnej listy DOMNodeList? Np .:Jak dodać elementy do DOMNodeList w PHP?

Mój pomysł polega na rozszerzeniu klasy DOMDocument o kilka przydatnych metod, które zwracają dane jako DOMNodeList.

Czy można to zrobić bez pisania własnej wersji klasy DOMNodeList?

Odpowiedz

3

Nie można dodawać elementów do DOMNodeList za pośrednictwem numeru public interface. Jednak DOMNodeLists są żywe zbiory po podłączeniu do drzewa DOM, więc dodanie elementu podrzędnego do DOMElement doda element w kolekcji dziecięcej tego elementu (która jest DOMNodeList):

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

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

echo $nodelist->length;  // 1 

Mówisz, że chcesz dodać "kilka użytecznych metod zwracających dane jako DOMNodeList". W kontekście DOMDocument to robi to, co robi XPath. Pozwala na zapytanie wszystkich węzłów w dokumencie i zwrócenie ich w domenie DOMNodeList. Może tego właśnie szukasz.

+0

Dziękuję za odpowiedź, rozwiązuje problem. Pracuję nad prototypem mini-biblioteki, która dodaje obsługę CSS do klasy DOMDocument. Wykonuje określone zadania, takie jak wyszukiwanie widocznego koloru tła obrazu z przezroczystością (poprzez dostęp do CSS elementu i węzłów nadrzędnych). Wypróbuję XPath, kiedy już znajdę porządny konwerter selektorów CSS na XPath. – optimizitor

+0

@optimizitor zauważ, że istnieją już biblioteki innych firm, które już to mają. Zobacz http://stackoverflow.com/a/3577662/208809 – Gordon

+0

Załóżmy, że 'DOMNode $ elem' jest pobierany z załadowanego HTML, czy istnieje sposób na zapisanie jego kontekstu (' parentNode', 'previousSibling',' nextSibling ')? Zmienia się po zastosowaniu 'DOMNode :: appendChild (DOMNode $ elem)'. – optimizitor