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

使用PHP简单HTML DOM解析器查找表单元格并获取下一个同级的内容,php,dom,html-parsing,Php,Dom,Html Parsing,我试图使用PHP简单HTML DOM解析器获取外部文件的HTML。该文件包含一个表,目标是找到具有特定数据内容的可编辑单元格,然后获取下一个同级单元格的数据。需要将这些数据放入PHP变量中 根据这些文章中的研究和信息,我当然能够得出一些结果,但我恐怕我可能走错了方向 表行如下所示: <tr> <td>fluff</td> <td>irrelevant</td> <td>etc</td> <td&

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

根据这些文章中的研究和信息,我当然能够得出一些结果,但我恐怕我可能走错了方向

表行如下所示:

<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>
因此,最终,在上面的示例中,123.456的值需要以某种方式进入一个PHP变量

谢谢你的帮助

可以使用类来完成。您不需要外部库来完成此操作

下面是一个例子:

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

使用简单的html dom解析器:

$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);
$str=”
绒毛
无关的
等
123.456
绒毛
无关的
等
";
$html=str\u get\u html($str);
$tds=$html->find('table',0)->find('td');
$num=null;
foreach($tds作为$td){
如果($td->plaintext=='Hello world'){
$next_td=$td->next_sibling();
$num=$next\u td->纯文本;
打破
}
}
回音($num);

找到你的元素,然后使用next_sibling()获取它的“邻居”@Marc:I能够找到元素的内部文本:
$e=$html->find('td',0)->innertext='Hello world'
但我不确定一旦找到元素后如何引用它本身。
find(td,0)
返回该元素,然后立即从中提取innertext。如果它是
find(td,0)->next_sibling()
,则会在找到的td之后得到td。这个示例确实允许我查找元素的内部文本。然后如何获取下一个同级的内部文本?使用
$node->nextSibling->nodeValue。请注意,DOMXpath比PHP简单Html DOM解决方案要快得多。这也可以很好地工作,并且不需要包含PHP简单DOM解析器。谢谢你,heh2mgl!谢谢你,阿迪迪。这将工作并返回所需的结果。如果我理解的话,它会遍历每个表以及每个表中的每个td,当它找到一个具有所需值的td时,它会获取下一个同级的明文值。是这样的,这意味着搜索将在所有表中进行还是仅在DOM中的第一个表中进行?您可以决定-此代码将遍历第一个表:
$html->find('table',0)
零索引表示它找到的第一个表标记
$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);