php: разобрать строку из html - PullRequest
3 голосов
/ 28 августа 2010

Я открыл HTML-файл, используя

file_get_contents('http://www.example.com/file.html')

и хотите проанализировать строку, включая «ParseThis»:

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

Как видите, он находится внутри тега h1 (первый тег h1 из файла). Как я могу получить текст "ParseThis"?

Ответы [ 3 ]

5 голосов
/ 28 августа 2010

Для этого вы можете использовать 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, потому что я отвечал на это раньше, но мне лень найти дубликат

4 голосов
/ 28 августа 2010

Используйте эту функцию.

<?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>');
1 голос
/ 28 августа 2010

Поскольку это первый тег h1, его получение должно быть довольно тривиальным:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...