有没有好的PHP库可以将html / php文件转换为对象

时间:2012-02-05 20:25:58

标签: php dom jquery-selectors static-analysis

我看到很多可以解析html的php库。一个很好的例子是QueryPath,它模仿了Jquery Api。

但是,我希望分析phtml。因此,不仅图书馆擅长分析DOM,而且擅长分析php processing instructions。例如 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库来阅读以下内容:

  • 由xpath或css选择器找到的DOM节点的内部html。

也可能提供以下内容:

  • 脚本中调用的php函数/方法列表
  • php变量的值
  • 该页面所需的页面
  • 第5行之前使用的php变量列表
  • 在body元素的第1段之前使用的php变量列表

我可以花一些时间在一起琐事,借用内置的DOM Api,内省和字符串操作等借用phpdocumentorZend Framework Reflection之类的代码。

但是,如果有某种类型的* phtmlQuery“库可以做这些事情那么它就会很方便。

3 个答案:

答案 0 :(得分:3)

要从文件中获取处理说明(和其他节点),您可以使用DOMXPath

$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运行它们,也可以尝试其中一些:

那些不会神奇地为您提供开箱即用的信息,因此您可能需要自己写几行。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以使用PHP的token_get_all来标记PHP,这样您就可以遍历结果并检查函数调用和PHP值。

E.g:

<?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);

您仍然需要编写一些代码来遍历所有标记,查看它们是什么,然后根据标记类型(函数名称,文字字符串,变量赋值等)获取值,但这样做很多就解析PHP而言,为你工作。