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

标签 php dom html-parsing

我正在尝试使用 PHP Simple HTML DOM Parser 来获取外部文件的 HTML。该文件包含一个表格,目标是找到具有特定数据内容的可用单元格,然后获取下一个兄弟单元格的数据。此数据需要放入 PHP 变量中。

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

表格行如下所示:

<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 单元格中获取数字。以下代码找到该表格单元格并回显其内容,但我试图将其用作地标以获取下一个单元格的数据的尝试失败了...

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

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

感谢您的帮助!

最佳答案

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

举个例子:

<?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;
}

关于php - 使用 PHP 简单 HTML DOM 解析器查找表格单元格并获取下一个兄弟的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15771266/

相关文章:

php - mysql 左连接不从连接表返回行

php - Highchart - 显示 JSON 数据 - MYSQL/PHP

http - 从外部 url 导航时 Document.referrer 为空?

node.js - NodeJS 的 htmlparser 教程?

php - symfony2 空 jsonResponse

php - 如何找到 php 函数中的参数?

iphone - 如何在iPhone上显示Xpath

python - 为什么用美汤解析这个标签是空的?

javascript - 如何检测是否没有鼠标悬停?

javascript - 如何针对任何标题稳健地解析文档并构建仅包含这些标题的 <ul> 树