首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP简单HTML DOM解析器查找表格单元格并获取下一个兄弟单元的内容

问使用PHP简单HTML DOM解析器查找表格单元格并获取下一个兄弟单元的内容
EN

Stack Overflow用户
提问于 2013-04-03 02:12:25
回答 2查看 17.9K关注 0票数 5

我正在尝试使用PHP简单的HTML DOM解析器来抓取外部文件的HTML。该文件包含一个表,目标是查找具有特定数据内容的可用单元格,然后获取下一个同级单元格的数据。这些数据需要放入PHP变量中。

根据在How to parse and process HTML/XML with PHP?,Grabbing the href attribute of an A element,Scraping Data: PHP Simple HTML DOM Parser,当然还有PHP Simple HTML DOM Parser Manual等文章中找到的研究和信息,我已经能够产生一些结果,但我担心我可能走错了路。

表格行如下所示:

代码语言:javascript
复制
<tr>
<td>fluff</td>  
<td>irrelevant</td> 
<td>etc</td>   
<td><a href="one">Hello world</a></td>                        
<td>123.456</td> 
<td>fluff</td>          
<td>irrelevant</td>   
<td>etc</td>
</tr>

我要做的是找到包含"Hello world“的单元格,然后从下一个td单元格中获取数字。下面的代码找到该表格单元格并回显其内容,但我试图将其用作获取下一个单元格数据的地标,但失败了……

代码语言:javascript
复制
$html = file_get_html("http://site.com/stuff.htm");
$e = $html->find('td',0)->innertext = 'Hello world';
echo $e;

因此,最终,在上面的示例中,123.456的值需要以某种方式进入PHP变量。

谢谢你的帮忙!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-03 02:23:08

这可以使用DOMXPath类来完成。为此,您不需要外部库。

下面是一个示例:

代码语言:javascript
复制
<?php

$html = <<<EOF
<tr>
<td>fluff</td>  
<td>irrelevant</td> 
<td>etc</td>   
<td><a href="one">Hello world</a></td>                        
<td>123.456</td> 
<td>fluff</td>          
<td>irrelevant</td>   
<td>etc</td>
</tr>
EOF;


// create empty document 
$document = new DOMDocument();

// load html
$document->loadHTML($html);

// create xpath selector
$selector = new DOMXPath($document);

// selects the parent node of <a> nodes
// which's content is 'Hello world'
$results = $selector->query('//td/a[text()="Hello world"]/..');

// output the results 
foreach($results as $node) {
    echo $node->nodeValue . PHP_EOL;
}
票数 4
EN

Stack Overflow用户

发布于 2013-04-03 02:37:09

使用简单的html dom解析器:

代码语言:javascript
复制
$str = "<table><tr>
<td>fluff</td>  
<td>irrelevant</td> 
<td>etc</td>   
<td><a href=\"one\">Hello world</a></td>                        
<td>123.456</td> 
<td>fluff</td>          
<td>irrelevant</td>   
<td>etc</td>
</tr></table>";

$html = str_get_html($str);

 $tds = $html->find('table',0)->find('td');
 $num = null;
 foreach($tds as $td){

     if($td->plaintext == 'Hello world'){

        $next_td = $td->next_sibling();
        $num = $next_td->plaintext ;    
        break; 
     }
 }

 echo($num);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15771266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档