2013-03-03 23 views
6

kullanarak alın. Bu soru birçok kez yanıtlanmış gibi görünüyor ama yine de parçaları bir araya getiremiyorum.Tüm öğeleri sınıf adına göre DOMDocument

Her sınıfa ait düğüm değerini ada göre almak istiyorum. Örneğin

<td class="thename"><strong>32</strong></td> 
<td class="thename"><strong>12</strong></td> 

i bu döngü için bir tür ama uygulama hakkında gitmek nasıl tam olarak emin değil gerektirir varsayalım 32 ve 12 kapmak istiyorum. İşte ben bu senin aradığınızı mı bugüne kadar

$domain = "http://domain.com"; 
$dom = new DOMDocument(); 

$dom->loadHTMLFile($domain); 
$xpath = new DomXpath($dom); 
$div = $xpath->query('//*[@class="thename"]')->item(0); 
$stuff = $div ->textContent; 

echo($stuff); 

cevap

11

var ne?

$result = array(); 

    $doc = <<< HTML 
    <html> 
     <body> 
      <div>1 
       <span>2</span> 
      </div> 
      <div>3</div> 
      <div>4 
       <span class="class1"><strong>5</strong></span> 
       <span class="class1"><strong>6</strong></span> 
       <span>7</span> 
      </div> 
     </body> 
    </html> 
HTML; 
    $classname = "class1"; 
    $domdocument = new DOMDocument(); 
    $domdocument->loadHTML($doc); 
    $a = new DOMXPath($domdocument); 
    $spans = $a->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]"); 

    for ($i = $spans->length - 1; $i > -1; $i--) { 
     $result[] = $spans->item($i)->firstChild->nodeValue; 
    } 

    echo "<pre>"; 
    print_r($result); 
    exit(); 
+1

yılında yaptı. xpath sorgusunu bozabilir misin? Bunların hepsi benim için yeni. teşekkürler – Sammy

+0

[XPath 1.0] kullanıyorum (http://cweiske.de/tagebuch/XPath%3A%20Select%20element%20by%20class.htm), farketmez. Varyansınızı kullanabilirsiniz '$ query = '// * [@ class ="'. $ ClassName. '"]'; – user2112300

+0

$ img_tags = $ tags-> query (" // * [içerir (concat ('' , normalize boşluk (@class), ''), 'thumbBlock')]/div/div/a/img "); Bu bana 500 iç sunucu hatası veriyor – Luckyy

3

i basitçe php hileye neden olabilir

$dom = new DOMDocument('1.0'); 
      $classname = "product-name"; 

      @$dom->loadHTMLFile("http://shophive.com/".$query); 
      $nodes = array(); 
      $nodes = $dom->getElementsByTagName("div"); 
      foreach ($nodes as $element) 
      { 
       $classy = $element->getAttribute("class"); 
       if (strpos($classy, "product") !== false) 
       { 
         echo $classy; 
         echo '<br>'; 
       } 

      } 
+1

Ürün sınıfınız dizgedeki ilk sınıfsa ne olur? – MastaBaba

+0

, noktanızı almadı mı? –

+0

"Ürün" için dize konumunu, 0'dan büyük olsun, kontrol edin. Ancak, eğer ilk konumdaysa, kontrolünüz başarısız olmaz (strpos ($ classy, ​​"product")> 0)? – MastaBaba

İlgili konular