SORU
16 HAZİRAN 2011, PERŞEMBE


Elde code tarafından elementleri DOM

PHP DOM kullanıyorum ve belirli bir sınıf adına sahip bir DOM düğüm içinde bir öğe almak için çalışıyorum. Bu alt eleman almak için en iyi yolu nedir?

CEVAP
16 HAZİRAN 2011, PERŞEMBE


Güncelleme: *[@class~='my-class'] css seçici sürüm Xpath

Benim yorum hakre yorum yanıt olarak aşağıda sonra çok merak ettim ve Zend_Dom_Query arkasındaki kod içine baktı. Yukarıdaki seçici (denenmemiş) aşağıdaki xpath için derlenmiş gibi görünüyor:

[contains(concat(' ', normalize-space(@class), ' '), ' my-class ')]

yani php olacaktır:

$dom = new DomDocument();
$dom->load($filePath);
$finder = new DomXPath($dom);
$classname="my-class";
$nodes = $finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]");

Burada yaptığımız aslında hepsi de tek bir sınıf boşluk ile sınırlı olacak şekilde class öznitelik normalleştirmek ve tam sınıf listesi alanlarında çevrilidir. Sınıf ekleme bir boşluk arıyor. Bu şekilde etkili bir şekilde arayan ve my-class sadece örneklerini bulmak.


Bir xpath seçici kullanmak?

$dom = new DomDocument();
$dom->load($filePath);
$finder = new DomXPath($dom);
$classname="my-class";
$nodes = $finder->query("//*[contains(@class, '$classname')]");

Eğer eleman bir tür ise sadece belirli tagname ile * değiştirebilirsiniz.

Eğer çok karmaşık seçici, bu bir sürü yapmak gerekiyorsa CSS seçici sözdizimi (jQuery la) destekleyen Zend_Dom_Query tavsiye ederim:

$finder = new Zend_Dom_Query($html);
$classname = 'my-class';
$nodes = $finder->query("*[class~=\"$classname\"]");

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Sams Page :D

    Sams Page :D

    15 Mart 2009
  • SuicideSheeep

    SuicideSheee

    8 Ocak 2012
  • Tek Syndicate

    Tek Syndicat

    23 Temmuz 2008