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