php - 哪些库将使用 PHP 解析 DTD

标签 php parsing dtd

我需要使用 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_LexerGeneratorPHP_ParserGenerator 等)。

* PHP 的 expat 包装器(XML 解析器)确实提供了对符号声明的访问,这些声明与一般实体相似但不同。

关于php - 哪些库将使用 PHP 解析 DTD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2917940/

相关文章:

java - 如何向用户报告丢失的DTD文件?

c - 使用 expat 验证 XML 文档

PHP session token 可以多次使用吗?

python - 让外籍人士在 python 中使用 .dtd 进行实体替换

php - 显示类别的产品

Python .append() 到一行中的向量

java - 在java中使用正则表达式从字符串中提取数字

python - SAX 混淆 XML 中同名的两个节点

php - Eloquent 关系 - 查询行到列

PHP & 可湿性粉剂 : try catch not working when error from DB is thrown