使用PHP遍历HTML文件元素

时间:2017-01-31 19:27:47

标签: php html dom

我需要阅读一个HTML文件(我不知道它会是什么样子)并浏览所有元素。对于那些具有innerhtml文本的元素,我想抓住或修改它。我进行了详尽的搜索,但找不到能满足我需求的东西。

这是一个示例HTML文件:

<!DOCTYPE html>
<html lang="en">
<body>
   <p> 1st text I need</p>
   <a href="#">2nd text I need</a>
   <table>
     <tr>
       <td>3rd text I need</td>
     </tr>
   </table>
</body>
</html> 

这就是我需要完成的事情:

  1. 遍历文件
  2. 查找哪些元素具有innerhtml
  3. 抓取或修改文字
  4. 保存文件
  5. 在上面的文件中,几乎所有元素都有文字但复杂的文件不会被删除。 我可以使用DOMDocument()循环遍历特定类型的节点,但我不知道在选择文件之前我会遇到什么。 我认为下面的代码会这样做,但它在循环期间只打印文件名。

    <?php
    include 'functions.php';
    $doc = new DOMDocument();
    $doc->loadHTMLFile('test.html');
    showDOMNode($doc);  
    
    function showDOMNode($domNode) {
    
        foreach ($domNode->childNodes as $node)
        {
            if($node->nodeName !="#text") {
                echo $node->nodeName . ' ';
                echo $node->nodeType . ' ';
                echo $node->textContent . '<br>';
    
                if($node->hasChildNodes()) {
                    showDOMNode($node);
                }
            }
        }    
    }           
    ?>
    

    这是我得到的:

    html 10
    html 1 1st text I need 2nd text I need 3rd text I need
    body 1 1st text I need 2nd text I need 3rd text I need
    p 1 1st text I need
    a 1 2nd text I need
    table 1 3rd text I need
    tr 1 3rd text I need
    td 1 3rd text I need
    

    正如您所看到的,当textContent似乎显示所有子节点的文本时,我需要每个节点的特定节点。任何帮助深表感谢。

0 个答案:

没有答案