如何在PHP中基于特定节点查找子元素?

如何在PHP中基于特定节点查找子元素?,php,dom,xpath,Php,Dom,Xpath,我们可以使用childNodes属性和item函数基于父节点定位子元素,但是,如果父节点和子节点之间的路径太长,则可能需要编写的childNodes->item太多,如下面列出的PHP,我希望根据节点表查找p标记内的内容,你可以检查变量$句子,我不知道这是否是处理这种情况的唯一方法,有没有更好的方法 HTML 我需要得到p标记内的值,你可以看到代码很长,只需要得到p标记内的值,有没有办法缩短代码,比如使用 $sentence1 = $table_node->FIND('//tr/td/p'

我们可以使用childNodes属性和item函数基于父节点定位子元素,但是,如果父节点和子节点之间的路径太长,则可能需要编写的childNodes->item太多,如下面列出的PHP,我希望根据节点表查找p标记内的内容,你可以检查变量$句子,我不知道这是否是处理这种情况的唯一方法,有没有更好的方法

HTML

我需要得到p标记内的值,你可以看到代码很长,只需要得到p标记内的值,有没有办法缩短代码,比如使用

$sentence1 = $table_node->FIND('//tr/td/p')

不必重复编写childNodes->item?

如果我理解正确,您只需执行以下操作:$xpath->query'/table//p'。它将返回所有p元素,这些p元素是根表元素的直接或间接子元素。

xpath的查询允许您指定上下文节点。e、 例如,foreach$xpath->query'//table'作为$table{foreach$xpath->query'//p',$table{…},内部查询将在每个特定节点而不是整个文档开始搜索。
$content = file_get_contents('./a.html');
$dom = new \domDocument;
@$dom->loadHTML($content);
$dom->preserveWhiteSpace = false;
$xpath = new \DOMXPath($dom);

$table_list = $xpath->query('//table/tr/td/p');

$sentences = array();
foreach($table_list as $k=>$table_node){
    $sentences[] = $table_node->nodeValue;
}
$sentence1 = $table_node->FIND('//tr/td/p')
$content = file_get_contents('./a.html');
$dom = new \domDocument;
@$dom->loadHTML($content);
$dom->preserveWhiteSpace = false;
$xpath = new \DOMXPath($dom);

$table_list = $xpath->query('//table/tr/td/p');

$sentences = array();
foreach($table_list as $k=>$table_node){
    $sentences[] = $table_node->nodeValue;
}