我需要使用 PHP 解析 DTD,希望有一个简单 库来帮忙。每个 DTD 都有许多 <!ENTITY...
和 <!-- Comment...
元素,我需要采取行动。
请注意,我不需要根据这些 DTD 验证任何内容,只需将它们本身解析为数据文件即可。
我看过的几个选项:
James Clarke's SD ,这是万不得已的选择,但我想避免在 PHP 外部构建/安装/配置代码的复杂性。我不确定在我的情况下是否可行。
PEAR 有一个 XML_DTD_Parser ,这需要安装/配置 PEAR 和一些 pear 模块,我也不确定这是可能的,并且宁愿避免。有人成功使用过吗? 编辑:我后来了解到 XML_DTD_Parser 会丢弃注释,因此不是满足我需要的有效选项。
PHP XML Classes有另一个站点建议的 class_path_parser,但它无法读取 ENTITY 元素。它似乎在使用 PHP 的内置 XML 解析功能,该功能使用 EXPAT。
PHP 的 DOMDocument will validate against a DTD ,所以必须能够阅读它们,尽管我乍一看没有看到如何直接访问 DTD 解析器。
最佳答案
没有一个用于 PHP 的标准 XML 解析器可以访问一般实体*,也很少有可以访问注释的。 PHP 内置 XML Parser使用 Expat , 但不公开完整的 expat API;特别是,不能设置实体的处理程序。有一个PHP bug提交添加此内容。
AFAICT,在 DTD 解析器中处理注释和一般实体的唯一方法是编写您自己的解析器;手动或使用可用于 php 的词法分析器和解析器生成器之一(例如 PHP_LexerGenerator 和 PHP_ParserGenerator 等)。
* PHP 的 expat 包装器(XML 解析器)确实提供了对符号声明的访问,这些声明与一般实体相似但不同。
关于php - 哪些库将使用 PHP 解析 DTD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2917940/