【问题标题】:php: Parse string from htmlphp:从 html 中解析字符串
【发布时间】:2011-04-05 05:39:10
【问题描述】:

我使用

打开了一个 HTML 文件
file_get_contents('http://www.example.com/file.html')

并且想要解析包含“ParseThis”的行:

 <h1 class=\"header\">ParseThis<\/h1>

如您所见,它位于h1 标记内(文件中的第一个h1 标记)。如何获取文本“ParseThis”?

【问题讨论】:

    标签: php html parsing dom


    【解决方案1】:

    您可以为此使用DOM

    // Load remote file, supress parse errors
    libxml_use_internal_errors(TRUE);
    $dom = new DOMDocument;
    $dom->loadHTMLFile('http://www.example.com/file.html');
    libxml_clear_errors();
    
    // use XPath to find all nodes with a class attribute of header
    $xp = new DOMXpath($dom);
    $nodes = $xp->query('//h1[@class="header"]');
    
    // output first item's content
    echo $nodes->item(0)->nodeValue;
    

    另见

    标记这个CW,因为我之前回答过这个问题,但是我懒得找到重复的

    【讨论】:

      【解决方案2】:

      既然是第一个h1标签,获取它应该是相当简单的:

      $doc = new DOMDocument();
      $doc->loadHTML($html);
      $h1 = $doc->getElementsByTagName('h1');
      echo $h1->item(0)->nodeValue;
      

      http://php.net/manual/en/class.domdocument.php

      【讨论】:

        【解决方案3】:

        使用此功能。

        <?php
        function get_string_between($string, $start, $end)
        {
            $string = " ".$string;
            $ini = strpos($string,$start);
            if ($ini == 0)
                return "";
            $ini += strlen($start);
            $len = strpos($string,$end,$ini) - $ini;
            return substr($string,$ini,$len);
        }
        
        $data = file_get_contents('http://www.example.com/file.html');
        
        echo get_string_between($data, '<h1 class=\"header\">', '<\/h1>');
        

        【讨论】:

        • 它可能适用于这种情况,但您应该使用 DOM 选择器或 XML 导航。
        • 我更喜欢这个,因为它比 DOM 运行得更快,而且当有这样非常简单的要求时,我会使用我的 get_string_between :)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-18
        相关资源
        最近更新 更多