2014-11-29 10 views
5

Kendi DOMNodeList'imi oluşturmanın bir yolu var mı? Örn .:PHP'de DOMNodeList öğesine nasıl eleman eklenir?

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

Benim fikrim DOMNodeList olarak veri döndürecek bazı yararlı yöntemleri ekleyerek DOMDocument sınıfını uzatmaktır.

Kendi DOMNodeList sınıfını yazmadan bunu yapmak mümkün müdür?

cevap

3

DOMNodeList ürününü public interface aracılığıyla ekleyemezsiniz. Ancak, DOMNodeLists bir DOM Ağacı bağlı canlı koleksiyonları, bu nedenle bir DOMElement bir Çocuk Eleman ekleyerek bir (bir DOMNodeList olduğunu) o elementin çocuk koleksiyonunda eleman ekleyeceğim: Eklemek istediğiniz demek

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

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

echo $nodelist->length;  // 1 

"verileri DOMNodeList olarak döndüren bazı yararlı yöntemler". DOMDocument bağlamında, bu, XPath'un yaptığı şeydir. Belgedeki tüm düğümleri sorgulamanıza ve bir DOMNodeList uygulamasında döndürmenize olanak tanır. Belki de aradığın şey budur.

+0

Cevabınız için teşekkür ederiz, sorunu çözüyor. DOMDocument sınıfına CSS desteği ekleyen bir mini kitaplık prototipinde çalışıyorum. Saydamlıklı bir görüntünün arka plan rengini bulma gibi belirli görevleri gerçekleştirir ( öğesinin CSS'sine ve üst düğümlere erişerek). XPath'e CSS seçicilerin iyi bir dönüştürücüsünü bulduktan sonra XPath'ı deneyeceğim. – optimizitor

+0

@optimizitor, zaten var olan 3. parti kütüphaneleri olduğunu unutmayın. Bkz. Http://stackoverflow.com/a/3577662/208809 – Gordon

+0

Diyelim ki, "DOMNode $ elem" yüklenen HTML'den alınmış, içeriğini kaydetmenin bir yolu var mı ('parentNode',' previousSibling', 'nextSibling ')? DOMNode :: appendChild (DOMNode $ elem) 'uygulandığında değişir. – optimizitor

İlgili konular