2013-03-03 23 views
6

Questa domanda sembra avere avuto risposta numerose volte ma non riesco ancora a mettere insieme i pezzi.Ottieni tutti gli elementi per nome della classe utilizzando DOMDocument

Vorrei ottenere il valore del nodo di ogni classe per nome. per esempio

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

vorrei afferrare il 32 e il 12. assumo questo richiede per tipo di ciclo for ma non sicuro esattamente come procedere attuazione. Ecco cosa ho fino ad ora

$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); 

risposta

11

È questo ciò che stai cercando?

$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

che sembra fare il trucco. puoi abbattere la query xpath. Questo è tutto nuovo per me. grazie – Sammy

+0

Io uso [XPath 1.0] (http://cweiske.de/tagebuch/XPath%3A%20Select%20element%20by%20class.htm), non fa differenza. Puoi usare la tua varianza '$ query = '// * [@ class ="'. $ ClassName. '"]';' – user2112300

+0

$ img_tags = $ tags-> query ("// * [contiene (concat ('' , normalize-space (@class), ''), 'thumbBlock')]/div/div/a/img "); questo mi dà 500 errori interni del server – Luckyy

3

ho semplicemente fatto questo in php

$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

Cosa succede se la tua classe di prodotto è la prima classe nella stringa? – MastaBaba

+0

non hai capito? –

+0

Si controlla la posizione della stringa per "prodotto", se è maggiore di 0. Ma, se è in prima posizione, il controllo fallirebbe (in strpos ($ classy, ​​"product")> 0)? – MastaBaba

Problemi correlati