2011-02-25 18 views
5

DOMDocument sınıfında, öğelere göre kimlik ve etiket adı (getElementById & getElementsByTagName) tarafından değil, sınıf tarafından alınacak yöntemler vardır. Bunu yapmanın bir yolu var mı? Örnek olarak, aşağıdaki işaretlemeden nasıl bir div seçeyim?Sınıfına göre HTML belgesinden ayıklamak için DOMDocument kullanma

<html> 
... 
<body> 
... 
<div class="foo"> 
... 
</div> 
... 
</body> 
</html> 
+0

olası kopya [DOMDocument gerekir attribute class = "something"] öğesine sahip bir öğe arayın (http://stackoverflow.com/questions/3443701/domdocument-need-to-search-for-anement-that-has-attribute-class-something) – mario

cevap

11

basit bir cevabı xpath kullanmaktır:

$dom = new DomDocument(); 
$dom->loadHtml($html); 
$xpath = new DomXpath($dom); 
$div = $xpath->query('//*[@class="foo"]')->item(0); 

Ama bu boşluk kabul etmez. Eğer boşluk ayrılmış sınıfı tarafından belirlemeniz gerekirse cevap Ayrıca

//*[contains(concat(' ', normalize-space(@class), ' '), ' class ') 
+0

İyi cevap. Beni ona yen. –

+0

Benim alternatiflerimi kullanarak tabloyu içeren [include (@class, '$ classname')] – RafaSashi

2
$html = '<html><body><div class="foo">Test</div><div class="foo">ABC</div><div class="foo">Exit</div><div class="bar"></div></body></html>'; 

$dom = new DOMDocument(); 
@$dom->loadHtml($html); 

$xpath = new DOMXPath($dom); 

$allClass = $xpath->query("//@class"); 
$allClassBar = $xpath->query("//*[@class='bar']"); 

echo "There are " . $allClass->length . " with a class attribute<br>"; 

echo "There are " . $allClassBar->length . " with a class attribute of 'bar'<br>"; 
0

's ircmaxell için: Yani boşlukla ayrılmış sınıfı tarafından seçmek için, bu sorguyu kullanın ait

$dom = new DomDocument(); 
$dom->loadHtml($html); 
$xpath = new DomXpath($dom); 
$classname='foo'; 
$div = $xpath->query("//table[contains(@class, '$classname')]")->item(0); 
İlgili konular