2013-03-03 6 views
6

この質問は何度も答えられたようですが、私はまだ作品をまとめているようです。DOMDocumentを使用してクラス名ですべての要素を取得します

すべてのクラスのノード値を名前で取得したいと考えています。例

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

のために私は、これはループのためにそれを実装について移動する方法を正確にわからないの並べ替えのために必要と想定し32と12をつかむしたいと思います。ここに私は今まで何を持っています

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

答えて

11

これはあなたが探しているものですか?

$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

でこれをやりました。 xpathクエリを分解できますか?これは私にとって初めてのことです。ありがとう – Sammy

+0

私は[XPath 1.0](http://cweiske.de/tagebuch/XPath%3A%20Select%20element%20by%20class.htm)を使用しますが、違いはありません。あなたはあなたの分散を使用することができますあなたの分散 '$クエリ=' // * [@クラス= "'。$クラス名。'"] ''; – user2112300

+0

$ img_tags = $ tags-> query( "//(concat( ' 、正規化スペース(@class)、 '')、 'thumbBlock')]/div/div/a/img ");これは私に500の内部サーバエラーを与えます – Luckyy

3

私は単に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

あなたのプロダクトクラスが文字列の最初のクラスであればどうなりますか? – MastaBaba

+0

あなたの意見は分かりませんでしたか? –

+0

"product"の文字列の位置が0より大きいかどうかをチェックします。ただし、最初の位置にある場合はチェックが失敗しません(strpos($ classy、 "product")> 0)? – MastaBaba