Какие библиотеки будут анализировать DTD с помощью PHP

Мне нужно разобрать 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 сразу на первый взгляд.

Related of "Какие библиотеки будут анализировать DTD с помощью PHP"

Ни один из стандартных XML-парсеров для PHP не дает доступа к общим объектам *, а некоторые предоставляют доступ к комментариям. PHP, встроенный в XML Parser, использует Expat , но не предоставляет полный API-интерфейс expat; в частности, обработчик для объектов не может быть установлен. Чтобы добавить это, есть ошибка PHP .

AFAICT, единственный способ обработки комментариев и общих объектов в партизанке DTD – написать собственный синтаксический анализатор; либо вручную, либо используя один из генераторов лексеров и парсеров, доступных для php (например, PHP_LexerGenerator и PHP_ParserGenerator и другие).

* Оболочка expat PHP (XML Parser) предоставляет доступ к объявлениям нотации, которые похожи, но не совпадают с общими объектами.

Я не знаю, что это будет …

Если я понимаю, что вы ищете, вы ищете средство для извлечения и «узлов» из DTD, чтобы действовать на них. Очень интересно. Вот где мой мозг пошел:

  • Используйте класс DOMDocument напрямую. Похоже, что нет четкого способа получить данные DTD, если вы рассматриваете DTD как источник.
  • Аналогичным образом используйте SimpleXML . То же самое.
  • Используйте синтаксический анализатор XML , опять же, таким же образом, но используйте некоторые функции обработчика декларации сущности для получения информации. Я думаю, что это доказывает более предвидение и, вероятно, не то, что вам нужно. (Хотя я мог ошибаться.)
  • Используйте preg_match_all и т. П., Чтобы захватить ваши значения на основе шаблонов. Не отличаться от других мыслей в мире .
  • Используйте XSLT для создания всего, кроме того, что вам нужно. .xsl для удаления всех не-комментариев будет довольно легко управлять. Вполне возможно, вы могли бы просто выводить их в формате, который проще разбирать (скажем, в лучшей структуре XML). Сущности могут потребовать обработки через XSL-процессор PHP. Я немного ржавый на сущности.

Несмотря на это, я надеюсь, что это поможет.