2016-11-23 42 views
0

正如標題所說我試着去找到這裏的特定類元素的第一個孩子,我想做些什麼:PHP DOM解析器找到事業部的第一個孩子的具體類別和搜索每個元素

更新:我添加了格式。我也想到如何去到這個tbody。但在一天結束時,我試圖做的是檢查tbody中的每個元素是否等於「 - 」。那麼我將如何實現這一目標呢?我會將DOM對象轉換爲字符串嗎?什麼是一種有效的方式來做到這一點。

更新2:我發現了一個優雅的解決方案,我更新了我的代碼。問題仍然存在:最好的方法來檢查是否有整數?我只是將每個元素轉換爲一個字符串,然後做一個strpos條件?

更新3:沒想到我弄明白了。下面包含的是解決方案。我不得不進一步進入表體來選擇表格行並代之以循環。

foreach($html->find('div[class=compareSkillsOuter clear] section[class=playerStats] div[class=tiledBlueFrame] div[class=tableWrap] table[class=headerBgLeft] tbody tr') as $element){ 
 
    if($position = strrpos($element, '--'); 
 
    if($position !== false){ 
 
     echo "String found"; 
 
    } 
 
    else{ 
 
     echo "String not found"; 
 
    } 
 
}

格式:

<div class="compareSkillsOuter clear"> 
 
    <section class="playerStats"> 
 
     <div class="tiledBlueFrame"> 
 
      <div class="tl corner"></div> 
 
      <div class="tr corner"></div> 
 
\t  <div class="bl corner"></div> 
 
      <div class="br corner"></div> 
 
      <div class="tableWrap"> 
 
       <table class="headerBgLeft"> 
 
        <thead> 
 
         <tr> 
 
          <th class="alignleft">Rank</th> 
 
          <th class="alignleft">Total XP</th> 
 
          <th class="alignleft">Level</th> 
 
         </tr> 
 
        </thead> 
 
        <tbody> 
 
         <tr > 
 
          <td class="alignleft"><a href="#">1,700,012</a></td> 
 
          <td class="alignleft"><a href="#">3,290</a></td> 
 
          <td class="playerWinLeft alignleft"><div class="relative"><a href="#">55</a></div></td> 
 
         </tr> 
 
         <tr class=oddRow> 
 
          <td class="alignleft"><a href="#">--</a></td> 
 
          <td class="alignleft"><a href="#">--</a></td> 
 
          <td class="alignleft"><a href="#">--</a></td> 
 
         </tr> 
 
        </tbody> 
 
       </table> 
 
      </div> 
 
     </div> 
 
    </section> 
 
</div>

最好的解決方案:

\t \t $data = $html->find("table[class=headerBgLeft] tbody",0); 
 
\t \t $data1 = $data->find("tr td a"); 
 

 
\t \t $statistics = Array(); 
 

 
\t \t 
 
\t \t //echo $data1[1]->plaintext; 
 

 
\t \t foreach($data1 as $tr) 
 
    \t \t { 
 
    \t \t \t //store each 
 
\t \t \t echo "$tr 1<br>"; 
 
\t \t }

+0

Okey很好,現在我爲你解答了一個問題。我們*神奇*知道你的DOM結構是怎樣的?什麼是輸出,什麼是*期望*輸出?紅地毯在哪裏? – Xorifelse

+0

@Xorifelse哦謝謝你提醒我。我已將它添加到代碼中。還修改了我想要做什麼的描述。 tbody包含整數值。如果它爲空,那麼它們默認爲' - '。我如何檢查tbody是否每個都有一個整數? – Potion

回答

0

如果你想找到TR身體比只使用表和tbody元素。找到總是返回一個數組,你的if語句是用分號。

$data= $html->find("table[class=headerBgLeft] tbody"); 
$data1=$data->find("td tr"); 
foreach($data1 as $ed) 
{ 
    if($ed->innertext=="--") 
     echo "String is found"; 
    else 
     echo "String is not found"; 
} 

如果你只需要找到一個TBODY內的兩個破折號和它們的位置是固定的手段,他們總是在第二TR。您可以使用

$data1=$data->find("td tr",1); 

如果這不是你的問題。或者它不起作用請評論。我沒有測試過它。

+0

但是如果有兩個

與sam結構會怎樣。我簡化了它。我還沒有嘗試過,但我相信它會抓住他們兩個,這就是爲什麼我訴諸其他奇怪的方法在我的文章 – Potion

+0

該網站的HTML一直在改變其結構?最重要的是你想要什麼。如果你想從中獲取數據(如果你指定的類有更多的段元素),那麼這兩個段的代碼都是相同的。如果僅從第一部分代碼將改變。請告訴我你想要什麼? – Kumar

+0

@potion如果你想從第一部分的數據報廢比使用'$ data = $ html-> find(「table [class = headerBgLeft] tbody」,0);' – Kumar

相關問題