有没有好的php库可以将html/php文档转换成对象

Posted

技术标签:

【中文标题】有没有好的php库可以将html/php文档转换成对象【英文标题】:Are there any good php libraries that can convert html/php documents into objects 【发布时间】:2012-02-27 11:46:18 【问题描述】:

我看到很多可以解析 htmlphp 库。一个很好的例子是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 库来阅读以下内容:

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

还可能提供以下内容:

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

我可以花一些时间拼凑一些东西,从 phpdocumentor 和 Zend Framework Reflection 之类的东西中借用代码,使用内置的 DOM Api、内省和字符串操作等。

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

【问题讨论】:

analysing the php processing instructions 是什么意思?实际解释/执行 PHP 代码? 我不认为有这样的事情,而且我认为不应该有。您不妨将 PHP 和 HTML 代码分开并分别分析它们(HTML 带有解析器,PHP 可能带有反射或标记器之类的工具)。您的实际用例是什么? php 核心中包含一个 xml 解析器可以做到这一点,但您只能在有效的 xhtml 页面上使用它,而不仅仅是普通的 html 或损坏的 xhtml。您必须设置解析器来处理处理指令,这可能会变得非常复杂。 @nickb - 感谢您的评论。我的意思是解释DOM processing instruction nodes,而不执行它。 @Pekka - 我有点厚脸皮,因为我现在心情很厚脸皮。我明白你的意思。如果我试图分析“坏”的任意代码,那将是一场噩梦。但是,它是结构良好的 phtml,我了解我可以从中获得的限制。我确信有一些任务可以自动化来节省我的时间。 'rewrite 对 refactor' 的争论总是会很激烈。 【参考方案1】:

要从您的文件中获取处理指令(和其他节点),您可以使用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。您可以在

找到更多库 How do you parse and process HTML/XML in PHP?

获得处理指令后,您可以通过本机 Tokenizer 运行它们或尝试其中一些:

https://github.com/Andrewsville/PHP-Token-Reflection https://github.com/manuelpichler/staticReflection https://github.com/nikic/PHP-Parser

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

【讨论】:

谢谢。那些反射库是非常好的链接。正是我需要的那种东西。我刚开始学习QueryPath。所以,当我准备好时,我会看看是否可以将 PHP-Token-Reflection 作为 QueryPath 的扩展。如果有人不先这样做。【参考方案2】:

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

【讨论】:

【参考方案3】:

您可以使用 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);

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

【讨论】:

感谢您的提示。是的,我担心这将是很多工作。我梦想有一些不错的工具,它已经在那里,让它变得非常容易。 :o) 我知道这样一种工具——PHP 解释器。

以上是关于有没有好的php库可以将html/php文档转换成对象的主要内容,如果未能解决你的问题,请参考以下文章

自己写好的word文档如果放在别人的电脑上,格式、字体等都会发生变化,这是啥原因

办公自动化:Python-win32com自动将word文档转换成pdf格式!

从 HTML PHP 生成 PDF

怎样把WORD EXCEL这样的办公软件的文档格式转换成PDF

几种不同的excel转换成pdf方式

免费将pdf转换成word的软件分享,这几个软件一定要知道!