2014-11-23 62 views
0

我有下面的代码....PHP - 获取从一个元素中的链接元素已被发现后

<div class="outer"> 
<div> 
<h1>Christmas</h1> 
<ul> 
    <li>Holiday</li> 
    <li>Fun</li> 
    <li>Joy</li> 
</ul> 
<h1>4th July</h1> 
<ul> 
    <li>Fireworks</li> 
    <li>Happy</li> 
    <li>Spectral</li> 
</ul> 
</div> 
</div> 
<div class="outer"> 
<div> 
<h1>Christmas2</h1> 
<ul> 
    <li>Holiday</li> 
    <li>Fun</li> 
    <li>Joy</li> 
</ul> 
<h1>4th July</h1> 
<ul> 
    <li>Fireworks2</li> 
    <li>Happy</li> 
    <li>Spectral</li> 
</ul> 
</div> 
</div> 

我已经知道我能找到的DIV,然后看看DIV的元素中通过这样做等...

$doc->loadHTML($output); //$output being the text above 
$xpath = new DOMXpath($doc); 
$elements = $xpath->query('//div[@class="outer"]'); //Check outer 

我知道这上面的3线将从DIV中列出获得的元素,但我真的希望能够做的就是在[H1]的文字,然后显示每个H1旁边的[li]值..

输出我要找的是...

Christmas - Holiday, Fun, Joy 
4th July - Fireworks, Happy, Spectral 
Christmas2 - Holiday, Fun, Joy 
4th July2 - Fireworks, Happy, Spectral 
+0

显示你已经尝试了什么......我看到在试图解决您的问题没有力气。你在做什么是要求答案,没有帮助。 – ElefantPhace 2014-11-23 06:09:06

回答

1

是您可以继续使用xpath遍历标题上的元素并获取其后续的兄弟,即列表。例如:

$doc = new DOMDocument(); 
$doc->loadHTML($output); 
$xpath = new DOMXpath($doc); 
$elements = $xpath->query('//div[@class="outer"]/div'); 
if($elements->length > 0) { 
    foreach($elements as $div) { 
     foreach ($xpath->query('./h1', $div) as $e) { 
      $header = $e->nodeValue; 
      $list = array(); 
      foreach ($xpath->query('./following-sibling::ul/li', $e) as $li) { 

       $list[] = $li->nodeValue; 
      } 

      echo $header . ' - ' . implode(', ', $list) . '<br/>'; 
     } 
     echo '<hr/>'; 
    } 
} 

Sample Output

+0

Ghost我必须对我的请求进行更改,因为我认为如果我修改它,它仍然可以正常工作,但由于某些原因,它不起作用,请帮助修改后的版本。 – eqiz 2014-11-23 06:05:27

+0

@MattHam如果是这样的话,那么只需修改第一个查询,因为它有另一个div在'$ elements = $ xpath-> query('// div [@ class =“outer”]/div [@ class =“内心“]');' – Ghost 2014-11-23 06:07:04

+0

你100%的权利,但我的意思是没有一个班上那个是我的意思...我想如果我有基础知识,我将能够理解和修改你的代码,因为我来自ASP.NET,但显然我不如我想象的那么好。以上完全是我试图理解如何从中提取数据的结构。一百万感谢 – eqiz 2014-11-23 06:10:52

0

我已经在过去使用phpQuery这种类型的问题:

// include phpquery 
require('phpQuery/phpQuery.php'); 
// initialize 
$doc = phpQuery::newDocumentHTML($markup); 
// get the text from the various elements 
$h1Value = $doc['h1:first']->text(); // Christmas 
// ... etc. 

(未经测试)