2014-12-31 61 views
1

這是一個示例代碼:PHP簡單DOM解析器的第一個孩子

<div class="content"> 
<p>text 1</p> 
<p>text 2</p> 
<p>text 3</p> 
<table border="1" cellpadding="0" cellspacing="0" dir="ltr"> 
    <tbody> 
     <tr> 
      <td valign="top" width="205"> 
       <p>td1</p> 
      </td> 
      <td valign="top" width="205"> 
       <p>td2</p> 
      </td> 
      <td valign="top" width="205"> 
       <p>td3</p> 
      </td> 
     </tr> 
    </tbody> 
</table> 
</div> 

我想打印只是第一級P款

所以我試試這個代碼:

foreach($html->find('div.content p') as $p) 
{ 
    echo $p->plaintext; 
    echo "<br/>"; 
} 

我希望這些結果:

text 1 
text 2 
text 3 

但是我得到這些:

text 1 
text 2 
text 3 
td1 
td2 
td3 

有什麼辦法可以忽略其他p標籤?

+1

我不知道PHP Simple DOM解析器如何遵循css,但我會嘗試'$ html-> find('div.content> p')'來獲得直接的孩子。 – jeroen

回答

2

如果選擇是一樣的CSS,你正在尋找的選擇是

foreach($html->find('div.content > p') as $p) { 
    //       ^^ 
    ... 
} 

使用此選擇你找到直接孩子,你.content p找到所有p.content,而不僅僅是直接孩子。

+0

這是行不通的。 mybe你是真的...因爲p在表中> tbody> tr> td> P所以它是第一個P! –

+0

你不想得到第一個P孩子('p:first-child',它返回'text 1'和'td 1'),但是直接爲'div.content'的孩子,文本1-3'。它應該工作。你在上面的評論中寫的選擇器如果沒問題,但你需要嗎?不確定,運輸署的段落是不相關的,不是嗎? – panther

+0

是的,我不想在TD的段落,但我testet這段代碼和結果是相同的代碼在我的問題... –

相關問題