2011-02-25 8 views
5

द्वारा HTML दस्तावेज़ से निकालने के लिए DOMDocument का उपयोग करना DOMDocument क्लास में आईडी द्वारा और टैग नाम (getElementById & getElementsByTagName) द्वारा तत्व प्राप्त करने के तरीके हैं, लेकिन कक्षा द्वारा नहीं। क्या इसे करने का कोई तरीका है?कक्षा

उदाहरण के तौर पर, मैं निम्नलिखित मार्कअप से div का चयन कैसे करूं?

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

के संभावित डुप्लिकेट [DOMDocument करने की जरूरत है एक तत्व की खोज करें जिसमें विशेषता वर्ग = "कुछ" है] (http://stackoverflow.com/questions/3443701/domdocument-need-to-search-for-an-element-that-has-attribute-class- कुछ) – mario

उत्तर

11

सरल उत्तर xpath उपयोग करने के लिए है:

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

लेकिन उस रिक्त स्थान को स्वीकार नहीं करेगा।

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

अच्छा जवाब। मुझे इससे हराएं। –

+0

तालिका का उपयोग करके मेरा विकल्प देखें [इसमें शामिल है (@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

इसके अलावा के ircmaxell अगर आप अंतरिक्ष अलग वर्ग द्वारा चयन करने की आवश्यकता का जवाब:: तो अंतरिक्ष अलग वर्ग द्वारा चयन करने के लिए, इस क्वेरी का उपयोग

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