Какие библиотеки будут анализировать DTD с помощью PHP
Мне нужно проанализировать DTD с помощью PHP, и я надеюсь, что есть простая библиотека, которая поможет. Каждый DTD содержит множество элементов <!ENTITY...
и <!-- Comment...
, на которые мне нужно действовать.
Обратите внимание, что мне не нужно проверять что-либо на соответствие этим DTD, просто проанализируйте их как сами файлы данных.
Несколько вариантов, которые я рассмотрел:
SD Джеймса Кларка, что является крайним вариантом, но я хотел бы избежать сложности создание/установка/настройка кода, внешнего по отношению к PHP. Я не уверен, что это вообще возможно в моей ситуации.
У PEAR есть XML_DTD_PARSER, который требует установки/настройки PEAR и ряда модулей pear, что я также не уверен, возможно, и предпочел бы избежать. Кто-нибудь использовал его с успехом? РЕДАКТИРОВАТЬ: С тех пор я узнал, что XML_DTD_Parser отбрасывает комментарии, поэтому не подходит для моих нужд.
Классы PHP XML имеют class_path_parser, который предложил другой сайт, но он не может прочитать элементы СУЩНОСТИ. Похоже, он использует встроенные в PHP возможности синтаксического анализа XML, которые используют EXPAT.
PHPDOMDocument будет проверяться по DTD, поэтому он должен быть в состоянии прочитать их, хотя я не вижу, как получить доступ к синтаксическому анализатору DTD напрямую на первый взгляд.
2 answers
Ни один из стандартных синтаксических анализаторов XML для PHP не предоставляет доступ к общим сущностям*, и лишь немногие предоставляют доступ к комментариям. Встроенный в PHP синтаксический анализатор XML использует Expat, но не предоставляет полный API expat; в частности, нельзя установить обработчик для сущностей. Существует ошибка PHP, поданная для добавления этого.
AFAICT, единственный способ обрабатывать комментарии и общие сущности в синтаксическом анализаторе DTD - это написать свой собственный синтаксический анализатор; либо вручную, либо с помощью одного из лексеров и генераторы синтаксических анализаторов, доступные для php (например, php_lexergenerator и php_parsergenerator и другие).
* Оболочка expat PHP (анализатор XML) предоставляет доступ к объявлениям обозначений, которые похожи на общие сущности, но не совпадают с ними.
Я не знаю, полезно ли это будет...
Если я понимаю, что вы ищете, вы ищете средство для извлечения и "узлов" из DTD, чтобы действовать на них. Очень интересно. Вот куда пошел мой мозг:
- Используйте Класс DOMDocument напрямую. Похоже, что нет четкого способа получить данные DTD, если вы рассматриваете DTD как источник.
- Используйте SimpleXML таким же образом. То же.
- Используйте Синтаксический анализатор XML опять же, тем же способом, но используйте некоторые функции обработчика объявления сущности для получения информации. Я думаю, что это доказывает большую дальновидность и, вероятно, не то, что вам нужно. (Хотя я могу ошибаться.)
- Используйте preg_match_all или что-то подобное, чтобы получить ваши значения на основе шаблонов. Не отличаться от других мыслей в мире.
- Используйте XSLT, чтобы удалить все, кроме того, что вам нужно. .xsl для удаления всех не-комментариев было бы довольно легко управлять. Это довольно возможно, вы могли бы просто вывести их в формате, который легче анализировать (скажем, в лучшей структуре XML). Сущности могут потребовать обработки с помощью XSL-процессора PHP. Я немного подзабыл о сущностях.
Несмотря на это, я надеюсь, что кое-что из этого поможет.