Есть ли хорошие библиотеки php, которые могут конвертировать html / php документы в объекты - PullRequest
4 голосов
/ 06 февраля 2012

Я вижу много библиотек php, которые могут анализировать html.Хороший пример - QueryPath , который имитирует Jquery Api.

Однако я хочу проанализировать phtml.Таким образом, библиотека будет не только хороша для анализа DOM, но и для анализа инструкций по обработке php .например, Документ Php Объектная модель или PDOM .

Документ, подобный этому:

<?php
require 'NameFinder.php';
$title = 'Wave Hello';
$name = getName();
?><html>
<head>
<title><?php echo $title ?></title>
</head>
<body>
<h1>Hello <?php echo $name ?></h1>
<p>Blah Blah Blah</p>
</body>

Я хотел бы иметь возможность использоватьэтот вид библиотеки php для чтения таких вещей, как:

  • внутренний html-узел DOM, найденный селектором xpath или css.

, а также, возможно, такие вещи, как:

  • список функций / методов php, вызываемых в скрипте
  • значения переменных php
  • страниц, требуемых для этой страницы
  • список переменных php, используемых перед строкой 5
  • список переменных php, используемых перед 1-м абзацем элемента body

Я мог бы потратить некоторое время на изучение чего-то вместе, заимствуя код у таких вещей, как phpdocumentor и Zend Framework Reflection , используя встроенный DOM Api, самоанализ и манипуляции со строками и т. Д.

Но, если есть какая-то библиотека * phtmlQuery ", которая может делать такие вещи, тогда это будет удобно.

Ответы [ 3 ]

3 голосов
/ 06 февраля 2012

Чтобы получить инструкции по обработке (и другие узлы) из ваших файлов, вы можете использовать DOM и XPath :

$dom = new DOMDocument;
$dom->loadHTMLFile('/path/to/your/file/or/url');
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//processing-instruction()') as $pi) {
    echo $dom->saveHTML($pi), PHP_EOL;
}

Это выдаст:

<?php require 'NameFinder.php';
$title = 'Wave Hello';
$name = getName();
?>
<?php echo $title ?>
<?php echo $name ?>

Это будет работать с неработающим HTML.Вы можете найти дополнительные библиотеки на

Получив инструкции по обработке, выможете запустить их через собственный Tokenizer или попробовать некоторые из них:

Те волшебным образом не дадут вам информацию, которую вы ищете из коробки, поэтому вам, вероятно, придется написать несколько дополнительных строк самостоятельно.

0 голосов
/ 06 февраля 2012

Вы можете использовать PHP token_get_all для токенизации PHP, чтобы затем можно было просмотреть результат и проверить вызовы функций и значения PHP.

например:.

<?php

$src = <<<EOD
<?php
require 'NameFinder.php';
$title = 'Wave Hello';
$name = getName();
?><html>
<head>
<title><?php echo $title ?></title>
</head>
<body>
<h1>Hello <?php echo $name ?></h1>
<p>Blah Blah Blah</p>
</body>
EOD;

$tokens = token_get_all($src);

var_dump($tokens);

Вам все еще нужно написать немного кода, чтобы пройтись по всем токенам, посмотреть, что они из себя представляют, а затем получить значение, основанное на типе токена (имя функции, литеральная строка, присвоение переменной и т. Д.), Но это делает LOT работы для вас, насколько разбора PHP.

0 голосов
/ 06 февраля 2012

в ядре php есть парсер xml, который может это делать, но вы сможете использовать его только на допустимых страницах xhtml, а не только на обычном html или сломанном xhtml. вам придется настроить синтаксический анализатор для обработки инструкций по обработке, и это может стать очень сложным.

http://www.php.net/manual/en/book.xml.php

http://www.php.net/manual/en/function.xml-set-processing-instruction-handler.php

...