如何根据PHP中的特定节点查找子元素?

时间:2015-05-07 20:19:12

标签: php dom xpath

我们可以使用childNodes属性和item()函数来定位基于父节点的子元素,但是,如果父节点和子节点之间的路径太长,则可能有太多的childNodes-&gt ;需要写的item(),就像我下面列出的PHP一样,我想找到P标签里面的内容,根据节点表,你可以检查变量$句子,我不知道是否这是处理这种情况的唯一方法,有没有更好的方法来做到这一点?

HTML

df

这是我的PHP代码

<table>
    <tr>
        <td>
            <p>Sentence 1</p>
        </td>
    <tr>
    <tr>
        <td>
            <a>Click 1</a>
        </td>
    <tr>
</table>
<table>
    <tr>
        <td>
            <p>Sentence 2</p>
        </td>
    <tr>
    <tr>
        <td>
            <a>Click 2</a>
        </td>
    <tr>
</table>

我需要获取P标签内的值,你可以看到代码真的很长,只是得到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');
foreach($table_list as $k=>$table_node){
    $sentence1 = $table_node->childNodes->item(0)->childNodes->item(0)->childNodes->item(0)->nodeValue;
}

而不是反复编写childNodes-&gt; item()?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

如果我理解正确,您可以这样做:$xpath->query('/table//p')。它将返回所有p元素,这些元素是根元素中table元素的直接或间接子元素。