Мне нужно разобрать DTD, используя PHP, и я надеюсь, что есть простая библиотека, чтобы помочь. Каждый DTD имеет множество элементов <!ENTITY...
и <!-- Comment...
, на которые мне нужно действовать.
Обратите внимание, что мне не нужно проверять что-либо против этих DTD, просто анализируйте их как файлы данных.
Несколько вариантов, на которые я смотрел:
Джеймса Кларка , который является вариантом последней инстанции, но я бы хотел избежать сложности создания / установки / настройки кода, внешнего для PHP. Я не уверен, что это возможно в моей ситуации.
PEAR имеет XML_DTD_Parser , который требует установки / настройки PEAR и ряда грушевых модулей, которые я также не уверен в возможности, и скорее избегаю. Кто-нибудь использовал его с успехом? EDIT: С тех пор я узнал, что XML_DTD_Parser отбрасывает комментарии, поэтому не является допустимым вариантом для моих нужд.
PHP-классы XML имеют класс_path_parser, который предложил другой сайт, но он не читает элементы ENTITY. Похоже, что он использует встроенные в PHP возможности синтаксического анализа XML, которые используют EXPAT.
PHP DOMDocument будет проверять на DTD , поэтому должен быть способен их прочитать, хотя я не вижу, как получить на партизане DTD сразу на первый взгляд.
Ни один из стандартных XML-парсеров для PHP не дает доступа к общим объектам *, а некоторые предоставляют доступ к комментариям. PHP, встроенный в XML Parser, использует Expat , но не предоставляет полный API-интерфейс expat; в частности, обработчик для объектов не может быть установлен. Чтобы добавить это, есть ошибка PHP .
AFAICT, единственный способ обработки комментариев и общих объектов в партизанке DTD – написать собственный синтаксический анализатор; либо вручную, либо используя один из генераторов лексеров и парсеров, доступных для php (например, PHP_LexerGenerator и PHP_ParserGenerator и другие).
* Оболочка expat PHP (XML Parser) предоставляет доступ к объявлениям нотации, которые похожи, но не совпадают с общими объектами.
Я не знаю, что это будет …
Если я понимаю, что вы ищете, вы ищете средство для извлечения и «узлов» из DTD, чтобы действовать на них. Очень интересно. Вот где мой мозг пошел:
Несмотря на это, я надеюсь, что это поможет.